ZF イシュー トラッカーによると、これは既知の問題のようです。
最近、多くの ZF ユーザーが、Zend_Date が 2008 年ではなく 2009 年という間違った年を返すというバグを報告しています。ただし、これは予期された動作であり、バグではありません。
よくある質問から:
コードで独自の形式を使用すると、たとえば 29.12.2009 を取得する状況になる可能性がありますが、29.12.2008 を取得することを期待していました。
年の違いが 1 つあります。2008 年ではなく 2009 年です。小文字の年定数を使用する必要があります。次の例を参照してください。
$date->toString('dd.MM.yyyy');
それ以外の
$date->toString('dd.MM.YYYY');
説明書より
デフォルトの ISO 形式は PHP の形式とは異なることに注意してください。これは、以前に使用したことがない場合はイライラする可能性があります。特に、年と分の書式指定子は、意図したとおりに使用されないことがよくあります。
year には、よく間違えられる 2 つの指定子があります。ISO 年を表す Y 指定子と実年を表す y 指定子。違いは小さいですが重要です。Y は、カレンダー形式でよく使用される ISO 年を計算します。たとえば、31 を参照してください。2007 年 12 月。実際の年は 2007 年ですが、2008 年の第 1 週の最初の週の最初の日です。したがって、「dd.MM.yyyy」を使用している場合は、 「31.December.2007」ですが、「dd.MM.YYYY」を使用すると「31.December.2008」になります。ご覧のとおり、これはバグではなく、使用される指定子に応じて予期される動作です。
分の違いはそれほど大きくありません。i を使用する PHP とは異なり、ISO は分の指定子 m を使用します。したがって、フォーマットに分がない場合は、正しい指定子を使用しているかどうかを確認してください。