【发布时间】:2013-11-28 09:26:51
【问题描述】:
似乎我不太了解函数strtotime。我的情况是我想将当前时间(现在)与特定时区的特定时间进行比较
例如,具体时间是“美国/纽约”时区的“本周一 14:00:00”:
$specificTime = strtotime("monday this week 14:00:00 America/New_York");
我当前的代码是:
$now = strtotime("now America/New_York");
if ($now > $specificTime) {
//do something
}
但我发现上面的$now 比当前时间提前了 6 小时。我猜数字 6 来自 America/New_York 的偏移量 -05:00,加上 1 小时的夏令时。
它应该从$now 中删除时区,它会正常工作:
$now = strtotime("now");
if ($now > $specificTime) {
//do something
}
有人可以解释为什么strtotime("now America/New_York") 比strtotime("now) 提前6 小时,为什么它们不相等?真的很迷茫。
P.S:我在 GMT+07:00。
【问题讨论】:
-
如果您知道它们是什么,则可以随时通过添加 X 秒来转换到不同的时区。
-
当您的机器处于完全不同的时区时,为什么您会期望
now和now America/New_York等效?此外,strtotime也不是魔法。我永远不想依靠它来获得正确的“本周星期一 14:00:00 America/New_York”。您是否尝试过使用DateTime,明确设置时区并进行一些日期数学运算? -
好吧,因为
strtotime返回一个时间戳,而时间戳不依赖于时区。如此简单的思考,这里的“现在”也等同于世界上任何地方的“现在”。我的意思是为什么差值提前 6 小时? -
因为如果你站在纽约,
now表示当前时间。同时,如果您在欧洲睡觉,now是不同的时间(但同一时刻)。
标签: php