Zend_Date:DST更改日的错误结果

时间:2012-03-27 12:38:16

标签: zend-framework zend-date

“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。但也许我错过了一些明显的东西?

2 个答案:

答案 0 :(得分:1)

我刚刚在堆栈溢出时发现它,它完全解决了我的问题(和你的一样)

请参阅Bug in Zend_Date (back in time)

祝你好运

答案 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');

时,请尝试查看日期输出是否相同