繁体   English   中英

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

[英]How do you handle timezone difference calculation in PHP?

有人告诉我,这种下面的计算用户本地时间的方法有时不起作用。 用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;
}

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

一些国家可能执行了多个时区更新,
此方法DateTimeZone :: getTransitions揭示过渡历史记录

date('Z');

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

刚刚在这里回答了一个非常类似的问题。 我建议您检查一下; 我彻底解释了两种时区偏移量计算的首选方法(使用简单的数学,然后使用datetimezonedatetime类)。

第一种方法是最简单(也是最合乎逻辑的)方法,即存储它们的偏移量(即,如果已有的话)并将其乘以3600(以秒为单位的1小时),然后将该值添加到当前的unix时间戳,以获取其最终运行时间。

另一种方法是使用DateTimeDateTimeZone类。 如何这两个类的工作,如图所示这里 ,是你创建两个DateTimeZone对象,一个与你的时区和一个与他们; 创建两个DateTime对象,第一个参数为"now" ,第二个分别为上面的DateTimeZone对象的引用; 然后在您的时区对象上调用getOffset方法,并将时区对象作为第一个参数,最终为您获取可以添加到当前unix时间戳中的偏移量(以秒为单位),以获取作业需要运行的时间。

快速解决方案:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM