4

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

4

2 回答 2

1

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

请参阅Zend_Date 中的错误(及时返回)

祝你好运

于 2014-01-14T14:30:04.313 回答
0

仅通过硬编码日期来测试代码时:$date = new Zend_Date('2012-03-25 4:00:00', 'YYYY-MM-dd H:mm:ss');结果还可以。使用时试试看日期输出是否一样$date->toString('d.M.yyyy HH:mm');

于 2012-05-11T06:03:25.657 回答