[英]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偏移量。
刚刚在这里回答了一个非常类似的问题。 我建议您检查一下; 我彻底解释了两种时区偏移量计算的首选方法(使用简单的数学,然后使用datetimezone
和datetime
类)。
第一种方法是最简单(也是最合乎逻辑的)方法,即存储它们的偏移量(即,如果已有的话)并将其乘以3600(以秒为单位的1小时),然后将该值添加到当前的unix时间戳,以获取其最终运行时间。
另一种方法是使用
DateTime
和DateTimeZone
类。 如何这两个类的工作,如图所示这里 ,是你创建两个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.