【发布时间】:2013-08-28 13:58:20
【问题描述】:
我的 PHP 代码中的 strtotime 存在这个问题,有时它是错误的(仅适用于某些时区),而对于其他时区它是正确的!!
我无法理解它。
我也在页面顶部设置了<?php date_default_timezone_set('GMT'); ?>,但这没有帮助!
基本上它的作用是根据 if 和 else if 条件将 offset/3600 值添加或减去 $time1 = strtotime('00:00'); 中的设置时间。
offset/3660 值是两个时区之间的时间差!
下面的代码适用于某些位置,但不适用于其他位置!基本上它会增加额外的 1-2 小时或起飞/减去额外的 1-2 小时(不是所有时间)。
即阿比让和伦敦的时差是-1。 应显示的时间(值)为 23:00,即 00:00 - 01:00 = 23:00。但显示的值为 00:00。
但是,正如我提到的,它适用于某些时区。 即对于纽约和伦敦之间的时差为-5,代码有效,它将 19:00 显示为 00:00 - 05:00 = 19:00
有人能解释一下吗?
这里是有问题的代码:
<?php
$time1 = strtotime('00:00');
if (0 > $offset)
{
// For negative offset (hours behind)
$hour_dif = date('H:i', strtotime($time1 -$offset/3600));
$time1 = "{$hour_dif}";
}
elseif (0 < $offset)
{
// For positive offset (hours ahead)
$hour_dif = date('H:i', strtotime($time1 +$offset/3600));
$time1 = "{$hour_dif}";
}
else
{
// For offsets in the same timezone.
$time1 = "in the same timezone";
}
echo "{$time1}";
?>
【问题讨论】:
-
你在哪里设置 $offset?
-
您是否考虑到时区之间的夏令时差异? (即,某些时区没有 DST;时区内的某些地区不遵守 DST,请参阅 en.wikipedia.org/wiki/Daylight_saving_time_by_country 了解它的复杂程度)
-
您知道 PHP 的
DateTime类可以减轻您为手动计算差异和间隔提出“智能”解决方案的需要吗? -
@N.B.是的,我看了看,这根本不是我所期望的。而且,它似乎非常复杂。
-
那么 3 行代码比你创造的这个烂摊子还复杂吗?
标签: php