2

Zend_Date を使用しています。以下の動作が正常かどうか、誰か教えてもらえますか? 返された月が間違っているようです。出力をコメントに入れました。

助けてくれてありがとう!

$oDate = new Zend_Date();

$oDate->setMonth(1);
$oDate->setDay(15);
$oDate->setYear(2012);
echo $oDate->get(Zend_Date::DATETIME_FULL);//Sunday, January 15, 2012 8:24:59 PM Europe/Madrid

$oDate->setMonth(2);
echo $oDate->get(Zend_Date::DATETIME_FULL);//Thursday, March 15, 2012 8:25:20 PM Europe/Madrid

$oDate->setMonth(3);
echo $oDate->get(Zend_Date::DATETIME_FULL);//Thursday, March 15, 2012 8:25:40 PM Europe/Madrid

$oDate->setMonth(4);
echo $oDate->get(Zend_Date::DATETIME_FULL);//Tuesday, May 15, 2012 8:27:32 PM Europe/Madrid

$oDate->setMonth(5);
echo $oDate->get(Zend_Date::DATETIME_FULL);//Tuesday, May 15, 2012 8:28:05 PM Europe/Madrid
4

1 に答える 1

1

キーは、元の投稿日です。

31 日ある月で、31 日目で setMonth() をそれよりも少ない日 (2 月、4 月、6 月、9 月、11 月) に設定すると、日付はその月の 31 日として計算され、1 日目にオーバーフローします。翌月の。

上記のスクリプトはそのままでは実行されませんでしたが、実行されました。

  $oDate->setMonth();
  $oDate->setDay();
  $oDate->setYear();
  echo ...

月ごとに異なるため、時間が異なります。

この問題は、4 月、6 月、9 月、または 11 月に設定した場合、特定の月の 31 日にのみ現れます (そのため、返信が投稿されたときに人々は問題を再現できませんでした)。または、月を 2 月に設定した場合は、その月の 29 日/30 日/31 日。

上記の例では、最初に日を設定してから月を設定することでこれを修正できます(月がオーバーフローしないため)。

もちろん、逆に同じ問題が発生します。これにより、1 か月が 31 日未満で、日 = 31 に設定されます。これは、翌月の 1 日にオーバーフローします。つまり、日付は正しい月の 1 日になります!

残念ながら、私はこれに対する簡単な修正をまだ見つけていません (PHP の DateTime クラスに基づいて新しい日付クラスを作成する以外に)。

お役に立てれば!

于 2013-02-20T15:34:56.137 に答える