Zend framework Zend_日期:DST变更日的错误结果
“2012年3月25日”是捷克共和国时间从凌晨2:00改为凌晨3:00的日期。在那一天,我网站上的一个功能停止正常工作,一位客户抱怨,等等。在挖掘了几个小时后,我发现Zend_date在那天表现得很奇怪:Zend framework Zend_日期:DST变更日的错误结果,zend-framework,zend-date,Zend Framework,Zend Date,“2012年3月25日”是捷克共和国时间从凌晨2:00改为凌晨3: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:0
#!/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;
白天休息
如果我将日期更改为“2012年3月26日12:00:00”,它将正确输出:
start date: 26.3.2012 00:01
end date: 26.3.2012 23:59
使用mktime而不是Zend_Date在这两种情况下都能正常工作。是Zend_约会中的bug吗?我想是的,所以我已经发布了一个bug报告。但是,也许我遗漏了一些明显的东西?当测试代码时,只是硬编码日期:
$date=new Zend_date('2012-03-25 4:00:00','YYYY-MM-dd H:MM:ss')代码>结果正常。使用$date->toString('d.M.yyyy HH:mm')时,尝试查看日期输出是否相同代码>我刚刚在堆栈溢出上发现了这个问题,它完美地解决了我的问题(与您的问题相同)
看
祝你好运我能想到的唯一一件事是,你的系统的时区不是欧洲/布拉格,在这种情况下,PHP将根据欧洲/布拉格和你的系统时区之间的差异重新计算日期/时间。当然,通过执行echo date('j.n.Y H:i'),这是很容易测试的代码>不过,我肯定不是专家,所以它也可能是Zend_Date中的一个bug(毕竟它是一个野兽般的组件)。
start date: 26.3.2012 00:01
end date: 26.3.2012 23:59