0

Zend_Dateオブジェクトに奇妙な問題があります。

セッターは、異なるシステムクロック日付で異なる操作を実行するようです。次のコードに従って、システムの日付が2013年1月28日であると仮定します。

$now=new Zend_Date(Zend_Date::ISO_8601);
$now->now();
echo '<br/>now: ' . $now->toString();
echo '<br/>now->day: ' . $now->get(Zend_Date::DAY);
echo '<br/>now->month: ' . $now->get(Zend_Date::MONTH);
echo '<br/>now->year: ' . $now->get(Zend_Date::YEAR);
$end=new Zend_Date('2013-02-25 14:23:34', Zend_Date::ISO_8601);
echo '<br/>end: ' . $end->toString();
$end->setHour('23')->setMinute('59')->setSecond('59')->setDay($now->get(Zend_Date::DAY))->setMonth($now->get(Zend_Date::MONTH))->setYear($now->get(Zend_Date::YEAR));
echo '<br/>endAfterSetters: ' . $end->toString();

次の出力が生成されます。

now: 28-01-2013 14:04:28
now->day: 28
now->month: 01
now->year: 2013
end: 25-02-2013 14:23:34
endAfterSetters: 28-01-2013 23:59:59

ただし、システムクロックを2013年1月29日に変更すると、出力は予想とは異なります。

now: 29-01-2013 14:07:22
now->day: 29
now->month: 01
now->year: 2013
end: 25-02-2013 14:23:34
endAfterSetters: 01-01-2013 23:59:59

最後の出力は01-01-201323:59:59ですが、29-01 -2013 23:59:59である必要があります!

これは、PHP 5.3.2および5.3.16、Zend_Framework 10.7、最新のZend_Date24880バージョンで発生します。

過去にはすべてがうまくいきました。

なぜそれが起こるのか考えはありますか?

PS:1月29、30、31日に使用しているときに、jqueryデータタイムプラグインの機能不全も発見しました...しかし、他の質問で説明します。

4

1 に答える 1

2

セッターは順番に呼び出されることを忘れないでください。つまり、電話をかけると、日付を2013年2月29setDay(29)日に変更するように指示されますが、これは有効な日付ではないため、2013年3月1日にロールオーバーされます。次に、を呼び出します。これにより、月が1月に変更され、2013年1月1日になります。setMonth(1)

この動作を制御するには、extend_monthオプションをコンストラクターに渡します。http: //framework.zend.com/manual/1.12/en/zend.date.overview.html#zend.date.options.extendmonthZend_Dateを参照してください。

于 2013-01-31T13:43:39.033 に答える