ホームページ > バックエンド開発 > PHPチュートリアル > PHP DateTime::modify で月を加算または減算すると予期しない結果が生じるのはなぜですか?

PHP DateTime::modify で月を加算または減算すると予期しない結果が生じるのはなぜですか?

Barbara Streisand
リリース: 2024-12-05 08:22:13
オリジナル
501 人が閲覧しました

Why Does PHP DateTime::modify Produce Unexpected Results When Adding or Subtracting Months?

月に関する 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 日にするという予想される動作の場合、次のように使用できます。戦略:

  • 次の月を手動で確認する: 結果の月の日数を繰り返し、目的の日付が存在するかどうかを確認します。そうでない場合は、次の月の 1 日にスキップします。
  • PHP 5.3 の相対時間スタンザ: PHP 5.3 で導入された構文の最初の日を利用して、変更を進める必要があることを明示的に指定します。日付から翌月の初日 (例: $date->modify('翌月の初日)月')).

以上がPHP DateTime::modify で月を加算または減算すると予期しない結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート