[英]PHP time() and end of DST issue - 1 hour after end of DST
我已经定义了这样的代码(为简化起见,为简化版本):
$fifteenMinsLater = strtotime('+900 second', time());
$now = time();
if ( $now > $fifteenMinsLater ) {
mtrace("This should NEVER happen");
}
else {
mtrace("This should always be the case");
}
DST在11/03/2013 2:00 AM结束于America / New_York,时钟返回1小时至1:00 AM。
当我在2013年11月3日以及凌晨1:00和凌晨2:00之间运行上述代码之后,DST结束(即2:00 AM变为1:00 AM之后),该行显示:
This should NEVER happen
打印。 但是,在DST转换之前或新的2:00 AM之后的任何时间都可以。
这导致了一个重大错误,导致用户尝试访问使用上述代码的功能,但在DST转换后的一小时之内不幸失败。
PHP 5.2.11。
有任何想法吗 ?
PHP中的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");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.