我已经定义了这样的代码(为了清晰起见,简化版本):
$fifteenMinsLater = strtotime('+900 second', time());
$now = time();
if ( $now > $fifteenMinsLater ) {
mtrace("This should NEVER happen");
}
else {
mtrace("This should always be the case");
}
2013年11月11日凌晨2:00 DST结束于America / New_York,时钟返回1小时至凌晨1:00。
当我在2013年3月11日DST结束(即凌晨2点到凌晨1点)以及凌晨1点到凌晨2点之间运行以上代码时,该行:
This should NEVER happen
已打印。但是,在DST转换之前或新的2:00 AM之后的任何时间都可以。
这导致了一个主要错误,导致用户尝试访问使用上述代码的函数,在DST转换后的一小时内失败。
PHP 5.2.11。
有什么想法吗?
答案 0 :(得分:0)
strtotime()
和其他日期函数不考虑时区。 DateTime()
确实:
$fifteenMinsLater = new DateTime();
$fifteenMinsLater->modify('+15 minutes');
$now = new DateTime();
if ( $now > $fifteenMinsLater ) {
mtrace("This should NEVER happen");
}
else {
mtrace("This should always be the case");
}
以下是如何在PHP 5.5中执行此操作:
$now = new DateTimeImmutable();
$fifteenMinsLater = $now->modify('+15 minutes');
if ( $now > $fifteenMinsLater ) {
mtrace("This should NEVER happen");
}
else {
mtrace("This should always be the case");
}