ホームページ >バックエンド開発 >PHPチュートリアル >月を追加するときに PHP の DateTime::modify が予期しない動作をするのはなぜですか?
日付と修飾子を扱う場合、PHP DateTime クラスは、私たちの期待と必ずしも一致しない可能性のある独特の動作を示します。一般的なシナリオの 1 つは月の追加であり、クラスの処理は最初は直観に反する可能性があります。
次のコード スニペットを考えてみましょう。 :
$date = new DateTime('2000-12-31'); $date->modify('+1 month'); echo $date->format('Y-m-d') . "\n"; $date->modify('+1 month'); echo $date->format('Y-m-d') . "\n";</p> <p>コードが日付を 1 日に進めることを期待する場合その翌月とその後継月では、驚くべき結果が得られます。</p> <pre class="brush:php;toolbar:false">2001-01-31 2001-03-03
予想される 2001-02-01 の代わりに、2001-01-31 が得られます。なぜこのようなことが起こるのでしょうか?
DateTime クラスは、内部日付形式を考慮した方法で月の加算を処理します。 12 月 31 日に 1 か月を追加すると、内部日付は 2001-02-31 になります。ただし、カレンダーによれば、2001 年 2 月は 28 日しかないため、PHP は自動的に 3 月 3 日に調整されます。
これはバグではなく、日付が常に有効な範囲内に収まるように意図された動作です。
PHP のデフォルトの動作は常に理想的であるとは限りませんが、それを調整するための洗練されたソリューションがあります:
手動介入:
チェック翌月に正しい日数を手動で追加して、希望の月に進みます。 date.
PHP 5.3 の "first day of" 修飾子:
PHP 5.3 以降では、"first day of" 修飾子を使用して次の日付に進むことができます。翌月の1日:
$d = new DateTime( '2010-01-31' ); $d->modify( 'first day of next month' ); echo $d->format( 'F' ), "\n"; // Outputs "February"
以上が月を追加するときに PHP の DateTime::modify が予期しない動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。