日付に 1 日追加すると翌月に繰り越せない場合があるのはなぜですか?

Linda Hamilton
リリース: 2024-11-22 00:45:12
オリジナル
345 人が閲覧しました

Why Does Adding One Day to a Date Sometimes Fail to Roll Over to the Next Month?

日付に 1 日を追加: 日付ロールオーバーの問題を解決する

日付に 1 日を追加すると、直感的に 1 日後の日付が得られます。 。ただし、シナリオによっては、特に月のロールオーバーが関係する場合、日付の追加によって予期しない結果が生じる可能性があります。

問題:

日付を 1 つ増やす次のコードを考えてみましょう。 day:

$stop_date = date('Y-m-d H:i:s', strtotime('2009-09-30 20:24:00'));
echo 'date before day adding: '.$stop_date;
$stop_date = date('Y-m-d H:i:s', strtotime('+1 day', $stop_date));
echo ' date after adding one day. SHOULD be rolled over to the next month: '.$stop_date;
ログイン後にコピー

このコードを実行すると、その日より前の日付が誤って示される次の結果が生成されます。追加:

date before day adding: 2009-09-30 20:24:00
date after adding one day. SHOULD be rolled over to the next month: 2009-09-30 20:24:00
ログイン後にコピー

解決策:

この問題を解決するには、2 つのアプローチを採用できます:

アプローチ 1: strtotime

PHP の正しい形式文字列strtotime 関数では、日付を正しく解析して変更するには、特定の形式文字列が必要です。提供されたコードでは、使用されている書式文字列 (「Y-m-d H:i:s」) は時間と分の操作のみを許可します。月のロールオーバーを有効にするには、形式文字列に「Y-m-d」指定子を含める必要があります。

$stop_date = date('Y-m-d H:i:s', strtotime('2009-09-30 20:24:00 ' . '+1 day'));
ログイン後にコピー

アプローチ 2: DateTime クラスの使用

PHP で導入された DateTime クラス5.2.0 では、日付操作のための改良されたメカニズムが提供されます。 DateTime オブジェクトを使用すると、日付を直接 1 日増やすことができます:

$stop_date = new DateTime('2009-09-30 20:24:00');
echo 'date before day adding: ' . $stop_date->format('Y-m-d H:i:s');
$stop_date->modify('+1 day');
echo 'date after adding 1 day: ' . $stop_date->format('Y-m-d H:i:s');
ログイン後にコピー

以上が日付に 1 日追加すると翌月に繰り越せない場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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