“2012 年 3 月 25 日”是捷克共和国时间从凌晨 02:00 更改为凌晨 03:00 的日期。那天,我网站上的一个功能停止正常工作,客户抱怨等等。在挖掘了几个小时后,我发现那天 Zend_Date 的行为很奇怪:
#!/usr/bin/env php
<?php
include 'Zend/Date.php';
date_default_timezone_set('Europe/Prague');
shell_exec('sudo date --set="25 Mar 2012 12:00:00"');
$date = new Zend_Date();
$date->set('00:01:00', Zend_Date::TIMES);
$startDate = $date->get(Zend_Date::TIMESTAMP);
echo 'start date: ' . date("j.n.Y H:i", $startDate) . PHP_EOL;
$date->set('23:59:00', Zend_Date::TIMES);
$endDate = $date->get(Zend_Date::TIMESTAMP);
echo 'end date: ' . date("j.n.Y H:i", $endDate) . PHP_EOL;
这输出:
start date: 24.3.2012 23:01
end date: 24.3.2012 23:59
白天关闭。
如果我将日期更改为“2012 年 3 月 26 日 12:00:00”,它会正确输出:
start date: 26.3.2012 00:01
end date: 26.3.2012 23:59
使用 mktime 代替 Zend_Date 在这两种情况下都能正常工作。它是 Zend_Date 中的错误吗?我认为是,所以我已经发布了一个错误报告http://framework.zend.com/issues/browse/ZF-12121。但也许我错过了一些明显的东西?