你如何处理PHP中的时区差异计算?

时间:2010-11-28 21:29:14

标签: php timezone

我被告知以下计算用户当地时间的方法有时不起作用。在PHP中执行此操作的最佳方法是什么?你做什么的?

public function getTimeOffset ($time) {
    $this->_cacheTimeOffset();  
    if ($this->timeOffsetExecuted) {
        $d = date("O");
        $neg = 1;

        if (substr($d, 0, 1) == "-") {
            $neg = -1;
            $d = substr($d, 1);
        }

        $h = substr($d, 0, 2)*3600;
        $m = substr($d, 2)*60;

        return $time + ($neg * ($h + $m) * -1) + (($this->timeOffset + $this->getDstInUse()) * 3600);
    }
    return $time;
}

4 个答案:

答案 0 :(得分:2)

使用DateTime扩展名,例如DateTime::getOffset
DateTimeZone::getOffset

某些国家/地区可能会执行多个时区更新,
此方法DateTimeZone::getTransitions显示转换历史记录

答案 1 :(得分:1)

date('Z');

以秒为单位返回UTC偏移量。

答案 2 :(得分:0)

刚刚回答了一个非常相似的问题over here。我建议你检查一下;我解释了进行时区偏移计算的两种首选方法(使用简单数学,然后是datetimezonedatetime类)。

  

第一种方式是最简单的方法   (也是最符合逻辑的)方式,那就是   存储它们的偏移量(如果你已经存在   拥有它,那就是)并乘以它   3600(1小时秒),然后添加   那个值到当前的unix时间戳来获取它们的最终时间   运行

     

另一种方法是使用   DateTimeDateTimeZone个类。   如图所示,这两个类如何工作   here,是你创造了两个   DateTimeZone个对象,一个与你的对象   时区和他们的时区;创建   第一个有两个DateTime个对象   参数为"now"和。{   第二是参考   上面有DateTimeZone个对象   (分别);然后打电话给    时区的getOffset方法   对象传递他们的时区对象   作为第一个参数,最终   在几秒钟内得到你的偏移量   可以添加到当前的unix中   时间戳来获取他们的的时间   工作需要运行。

答案 3 :(得分:-1)

快速解决方案:

<?php echo date('g:i a', strtotime("now + 10 hours 30 minutes")); ?>
相关问题