4

「2012年3月25日」は、チェコ共和国で時刻が午前2時から午前3時に変更された日付です。その日、私のWebサイトの1つの機能が正常に機能しなくなり、顧客から苦情が寄せられました。数時間掘り下げた後、その日、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

Zend_Dateの代わりにmktimeを使用すると、どちらの場合も正しく機能します。Zend_Dateのバグですか?そうだと思うので、すでにバグレポートhttp://framework.zend.com/issues/browse/ZF-12121を投稿しています。しかし、おそらく私は何か明らかなものが欠けていますか?

4

2 に答える 2

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 に答える