“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。但也许我错过了一些明显的东西?
答案 0 :(得分:1)
我刚刚在堆栈溢出时发现它,它完全解决了我的问题(和你的一样)
祝你好运答案 1 :(得分:0)
使用硬编码日期测试代码时:$date = new Zend_Date('2012-03-25 4:00:00', 'YYYY-MM-dd H:mm:ss');
结果还可以。使用$date->toString('d.M.yyyy HH:mm');