Php 标准时间与时区不同
似乎我不太了解函数Php 标准时间与时区不同,php,Php,似乎我不太了解函数strotime。我的情况是,我想将当前时间(现在)与特定时区上的特定时间进行比较 例如,具体时间为“美国/纽约”时区的“本周一14:00:00”: 我目前的代码是: $now = strtotime("now America/New_York"); if ($now > $specificTime) { //do something } 但我发现上面的$now比当前时间提前了6个小时。我从美国/纽约05:00的偏移量猜到的数字6,加上1小时的夏令时
strotime
。我的情况是,我想将当前时间(现在)与特定时区上的特定时间进行比较
例如,具体时间为“美国/纽约”时区的“本周一14:00:00”:
我目前的代码是:
$now = strtotime("now America/New_York");
if ($now > $specificTime) {
//do something
}
但我发现上面的$now
比当前时间提前了6个小时。我从美国/纽约05:00的偏移量猜到的数字6,加上1小时的夏令时
它应该将时区从$now
中删除,它将正常工作:
$now = strtotime("now");
if ($now > $specificTime) {
//do something
}
有人能解释一下为什么strttime(“现在美国/纽约”)
比strttime(“现在)
”提前6小时,为什么它们不等价?真的很困惑
附言:我现在是格林尼治时间+07:00。你可以使用
日期时间来进行此操作。我认为标准时间中的时区设置无效
$specificTime = new DateTime("monday this week 14:00:00", new DateTimeZone("America/New_York")));
$now = new DateTime("now", new DateTimeZone("America/New_York"));
然后,您可以将unix时间戳与以下内容进行比较:
if ($now->getTimestamp() > $specificTime->getTimestamp()) {
// do something ...
}
您可以使用DateTime
进行此操作。我认为strotime
中的时区设置无效
$specificTime = new DateTime("monday this week 14:00:00", new DateTimeZone("America/New_York")));
$now = new DateTime("now", new DateTimeZone("America/New_York"));
然后,您可以将unix时间戳与以下内容进行比较:
if ($now->getTimestamp() > $specificTime->getTimestamp()) {
// do something ...
}
每个时区之间都有时间偏移
strotime()
函数将根据时区返回Unix时间戳
它将使用默认时区,除非在该参数中指定了时区
默认时区是date\u default\u timezone\u get()的返回值。
请看下面的代码:
<?php
// UTC
echo date_default_timezone_get(), "\n";
// 2013-11-28 14:41:37
echo date('Y-m-d H:i:s', strtotime("now America/New_York")), "\n";
// 2013-11-28 09:41:37
echo date('Y-m-d H:i:s', strtotime("now")), "\n";
每个时区之间都有时间偏移
strotime()
函数将根据时区返回Unix时间戳
它将使用默认时区,除非在该参数中指定了时区
默认时区是date\u default\u timezone\u get()的返回值。
请看下面的代码:
<?php
// UTC
echo date_default_timezone_get(), "\n";
// 2013-11-28 14:41:37
echo date('Y-m-d H:i:s', strtotime("now America/New_York")), "\n";
// 2013-11-28 09:41:37
echo date('Y-m-d H:i:s', strtotime("now")), "\n";
简单调试:
<?php
$now = strtotime("now America/New_York");
echo date('r', $now);
// Thu, 28 Nov 2013 16:39:51 +0100
简单调试:
<?php
$now = strtotime("now America/New_York");
echo date('r', $now);
// Thu, 28 Nov 2013 16:39:51 +0100
如果你知道不同的时区是什么,只要加上X秒,你就可以将它们转换成不同的时区。now
和now America/New\u York
为什么在你的机器位于完全不同的时区时,你会认为它们是等价的呢g“本周星期一14:00:00 America/New_York”正确。您是否尝试过使用DateTime
,显式设置时区并进行一点日期计算?嗯,因为strotime
返回时间戳,时间戳不依赖于时区。因此简单的想法是,这里的“现在”也等同于“现在”“在世界上任何地方。我想说的是为什么相差6个小时?因为如果你现在站在纽约now
表示当前时间。同时,如果你在欧洲睡觉,现在是不同的时间(但同一瞬间)。如果您知道不同的时区是什么,您可以通过添加X秒来始终转换为不同的时区。当您的机器位于完全不同的时区时,为什么您希望now
和now America/New_York
具有相同的可能重复?而且,strotime
也不是魔术。我决不想指望它能把“本周星期一14:00:00美国/纽约”说对。您是否尝试过使用DateTime
,显式设置时区并进行一些日期计算?因为strotime
返回时间戳,并且时间戳不依赖于时区。所以简单的思考在这里是“现在”,在世界上任何地方也等同于“现在”。我想说的是为什么相差6个小时?因为如果你现在站在纽约now
表示当前时间。同时,如果你在欧洲睡觉,现在是不同的时间(但同一时刻)。“+1个月
”在我看来是一个坏例子。我们多久回答一次“+1个月没有像我想的那样有效”这里的问题…;-)但我同意整体观点。我改变了这个例子,以防万一。我希望关于+1天的问题不会没完没了。但我希望是“21:30:59”!;-)问题在于这里的“期望”概念。。。我只是太挑剔了。”+1个月
“在我看来是个坏例子。我们多久会回答一次“+1个月没有按我认为应该的那样工作”的问题…;-)但我同意整体观点。我改变了这个例子,以防万一。我希望关于+1天的问题不会没完没了。但我希望是“21:30:59”!;-)问题在于这里的“期望”概念。。。我只是太挑剔了。