繁体   English   中英

PHP time()和DST问题结束-DST结束后1小时

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM