PHP で月を追加するときに日付のオーバーランを防ぐにはどうすればよいですか?

Barbara Streisand
リリース: 2024-10-28 21:03:02
オリジナル
566 人が閲覧しました

How Can I Prevent Date Overruns When Adding Months in PHP?

月末日までに制限した PHP 日付の追加

概要

PHP の日付操作関数を使用すると、月を追加できます, ただし、場合によっては後続の月に超過が発生する可能性があります。この問題は、2 月 29 日に月を追加するなど、対象月に存在しない日付に月を追加するときに発生します。

提案された解決策: カスタム日付追加関数

この問題に対処するには、結果の月の末日を超えないようにして日付に月を追加するカスタム関数を作成できます。

実装:

<code class="php">function add($date_str, $months)
{
    $date = new DateTime($date_str);

    // Extract the day of the month as $start_day
    $start_day = $date->format('j');

    // Add 1 month to the given date
    $date->modify("+{$months} month");

    // Extract the day of the month again so we can compare
    $end_day = $date->format('j');

    if ($start_day != $end_day)
    {
        // The day of the month isn't the same anymore, so we correct the date
        $date->modify('last day of last month');
    }

    return $date;
}</code>
ログイン後にコピー

説明:

  • 関数は、元の日付文字列と追加する月数の 2 つのパラメーターを受け取ります。
  • 元の日付文字列からの DateTime オブジェクト。
  • 先頭のゼロなしで月の日を表す「j」書式指定子を指定した format() メソッドを使用して月の日を抽出します。
  • modify() メソッドを使用して、指定された月数を日付に追加します。
  • 月を追加した後、再度その月の日を抽出します。
  • 日の場合月が元の月と異なります。これはオーバーランがあったことを意味し、日付を前月の末日に修正して日付を修正します。
  • 最後に、修正された DateTime オブジェクトを返します。

例:

<code class="php">$result = add('2011-01-28', 1);   // 2011-02-28
$result = add('2011-01-31', 3);   // 2011-04-30
$result = add('2011-01-30', 13);  // 2012-02-29
$result = add('2011-10-31', 1);   // 2011-11-30
$result = add('2011-12-30', 1);   // 2011-02-28</code>
ログイン後にコピー

以上がPHP で月を追加するときに日付のオーバーランを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!