月に関する PHP DateTime::modify の異常を理解する
PHP DateTime::modify 関数は、月の加算または減算に使用されます。予期しない結果が生じる可能性があります。この理由は、PHP の日付操作メカニズムの固有の動作に起因します。
バグではない理由
内部的には、月を加算または減算するときに、PHP は増減します。月番号 (例: 1 month は月番号を 1 つ増やします)。ただし、結果の月の実際の日数はチェックされません。したがって、結果の月の日数が元の日付より少ない場合、PHP は次の月の最初から残りの日数を数えることによって日付を自動的に修正します。
質問に示されている例を考えてみましょう。
$date = new DateTime('2000-12-31'); $date->modify('+1 month'); echo $date->format('Y-m-d') . "\n"; // Output: 2001-01-31 $date->modify('+1 month'); echo $date->format('Y-m-d') . "\n"; // Output: 2001-03-03
この例では、最初に 1 か月を追加すると、日付は 2001-02-31 になります。ただし、2001 年 2 月には 28 日しかないため、PHP は日付を 31 日ある 3 月 3 日に自動修正します。
望ましい動作の解決策
日付を 1 か月進めて次の月の 1 日にするという予想される動作の場合、次のように使用できます。戦略:
以上がPHP DateTime::modify で月を加算または減算すると予期しない結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。