日付に 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 サイトの他の関連記事を参照してください。