PHP strotime是错误的(有时)?
在我的PHP代码中,strotime有一个问题,它有时是错误的(仅适用于某些时区),而对其他时区则是正确的 我的头脑绕不过去 我已经在我的页面顶部设置了PHP strotime是错误的(有时)?,php,Php,在我的PHP代码中,strotime有一个问题,它有时是错误的(仅适用于某些时区),而对其他时区则是正确的 我的头脑绕不过去 我已经在我的页面顶部设置了,但这没有帮助 基本上,它将在$time1=strotime('00:00')中的设置时间上加上或减去offset/3600值取决于if和else if条件 偏移量/3660值是两个时区之间的时差 下面的代码适用于某些位置,但不适用于其他位置!基本上,它会增加额外的1-2小时或起飞/减去额外的1-2小时(并非所有时间) i、 e.阿比让和伦敦之间
,但这没有帮助
基本上,它将在$time1=strotime('00:00')中的设置时间上加上或减去offset/3600
值代码>取决于if和else if条件
偏移量/3660值是两个时区之间的时差
下面的代码适用于某些位置,但不适用于其他位置!基本上,它会增加额外的1-2小时或起飞/减去额外的1-2小时(并非所有时间)
i、 e.阿比让和伦敦之间的时差为-1。
应显示的时间(值)为23:00,表示为00:00-01:00=23:00。但显示的值是00:00
然而,正如我提到的,它适用于某些时区。
i、 e.对于纽约和伦敦之间的时差-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}";
?>
好吧,因为strotime()
已经返回了一个时间戳,date()
希望您可以这样做
$hour_dif = date('H:i', ($time1 - ($offset*3600)));
或
分别从时间戳中删除或添加正确的秒数
我还假设,$offset
是以小时为单位的偏移量,因此必须乘以3600
才能得到秒数,而不是除以
好的,在测试代码并仔细思考之后,它变得很明显
用像-1
这样的负偏移量计算$time1-(-1)*3600
,我们都知道双重否定是正的
因此,实际上,您的代码可以压缩为:
$time1 = strtotime('00:00');
if ($offset == 0)
$time1 = "in the same timezone";
else
{
// For positive offset (hours ahead)
$hour_dif = date('H:i', ($time1 + ($offset*3600)));
$time1 = "{$hour_dif}";
}
echo "{$time1}\n";
并应按预期工作:
cobra@box ~ $ for i in {-24..24}; do php test.php $i; done;
00:00
01:00
02:00
03:00
04:00
05:00
06:00
07:00
08:00
09:00
10:00
11:00
12:00
13:00
14:00
15:00
16:00
17:00
18:00
19:00
20:00
21:00
22:00
23:00
in the same timezone
01:00
02:00
03:00
04:00
05:00
06:00
07:00
08:00
09:00
10:00
11:00
12:00
13:00
14:00
15:00
16:00
17:00
18:00
19:00
20:00
21:00
22:00
23:00
00:00
您在哪里设置$offset?您是否考虑了时区之间DST的差异?(即,某些时区没有DST;时区内的某些区域不遵守DST,请参阅了解其复杂程度)您是否了解PHP的DateTime
类,它可以减轻您手动计算差异和间隔的“智能”解决方案的需要?@N.B.是,我看了一眼,这根本不是我所期望的。此外,它似乎非常不必要的复杂。因此,有3行代码比你造成的混乱更复杂?我尝试过你的建议,但仍然是一样的。事实上,现在有了你的建议,它将显示纽约和伦敦的结果如下:14:42,这是错误的。我担心它不起作用。现在,它将以00返回所有值:00@EnergyLynxEnergyLynx好的,我已经翻了一遍,我的答案的最后编辑部分应该给出正确的结果。仍然返回所有值,如:00:00
cobra@box ~ $ for i in {-24..24}; do php test.php $i; done;
00:00
01:00
02:00
03:00
04:00
05:00
06:00
07:00
08:00
09:00
10:00
11:00
12:00
13:00
14:00
15:00
16:00
17:00
18:00
19:00
20:00
21:00
22:00
23:00
in the same timezone
01:00
02:00
03:00
04:00
05:00
06:00
07:00
08:00
09:00
10:00
11:00
12:00
13:00
14:00
15:00
16:00
17:00
18:00
19:00
20:00
21:00
22:00
23:00
00:00