5

Zend_Date がタイムスタンプを 1 年前に変換しています。

私の行動では:

// Timestamp
$intTime = 1293922800;

// Zend_Date object
$objZendDate = new Zend_Date($intTime);

// Get date

echo date('Y-m-d',$intTime).'<br>';
echo $objZendDate->get('YYYY-MM-dd');

この出力: 2011-01-02 2010-01-02

誰が私が間違っているのか教えてもらえますか?

4

2 に答える 2

13

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 を使用します。したがって、フォーマットに分がない場合は、正しい指定子を使用しているかどうかを確認してください。

于 2010-08-05T10:05:12.040 に答える
0

zwipの答えに追加すると、舞台裏で行われるのは、日付形式YYYY-MM-ddが実際にに変換され、指定されたタイムスタンプで内部的o\-m\-dにPHPの関数に渡されることです。date()

他の回答や日付形式oページの形式のドキュメントで述べたように、ISO週に基づいて年を計算すると、期待する値とは異なる年になる場合があります。

于 2010-08-05T10:17:33.247 に答える