我被告知以下计算用户当地时间的方法有时不起作用。在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;
}
答案 0 :(得分:2)
使用DateTime扩展名,例如DateTime::getOffset,
或DateTimeZone::getOffset
某些国家/地区可能会执行多个时区更新,
此方法DateTimeZone::getTransitions显示转换历史记录
答案 1 :(得分:1)
date('Z');
以秒为单位返回UTC偏移量。
答案 2 :(得分:0)
刚刚回答了一个非常相似的问题over here。我建议你检查一下;我解释了进行时区偏移计算的两种首选方法(使用简单数学,然后是datetimezone
和datetime
类)。
第一种方式是最简单的方法 (也是最符合逻辑的)方式,那就是 存储它们的偏移量(如果你已经存在 拥有它,那就是)并乘以它 3600(1小时秒),然后添加 那个值到当前的unix时间戳来获取它们的最终时间 运行
另一种方法是使用
DateTime
和DateTimeZone
个类。 如图所示,这两个类如何工作 here,是你创造了两个DateTimeZone
个对象,一个与你的对象 时区和他们的时区;创建 第一个有两个DateTime
个对象 参数为"now"
和。{ 第二是参考 上面有DateTimeZone
个对象 (分别);然后打电话给 时区的getOffset
方法 对象传递他们的时区对象 作为第一个参数,最终 在几秒钟内得到你的偏移量 可以添加到当前的unix中 时间戳来获取他们的的时间 工作需要运行。
答案 3 :(得分:-1)
快速解决方案:
<?php echo date('g:i a', strtotime("now + 10 hours 30 minutes")); ?>