0

重複の可能性:
日付を 1 か月増やす

日付を合計する次のコードがあります。

$var1 = date("d/m/Y");
$dia = substr($var1,0,2);
$mes = substr($var1,3,2);
$a_o = substr($var1,6,4);
$date = $a_o."-".$mes."-".$dia;
$new_date = strtotime( "+3 month", strtotime($date));
$new_date = date('d/m/Y', $new_date);
echo $new_date;

これは私が php.net で見つけた通常の方法ですが、$var1別の日付に変更しようとすると、たとえば'21/07/2020'結果が'31/01/1970'になり、何が問題なのかわかりません。私は多くのフォームを試しましたが、結果は同じです。

どうすればこれを修正できますか? または、日付に X か月を追加する他の形式はありますか?

4

3 に答える 3

4

5.3.0で追加されたdate_add()関数を調べます。

DateTime :: add --date_add — DateTimeオブジェクトに日、月、年、時間、分、秒の量を追加します

<?php
$date = new DateTime('2000-01-01');
$date->add(new DateInterval('P10D'));
echo $date->format('Y-m-d') . "\n";
?> 

5.2.0で追加されたdate_modify()関数もあります。

DateTime :: modify --date_modify —タイムスタンプを変更します

<?php
$date = new DateTime('2006-12-12');
$date->modify('+1 day');
echo $date->format('Y-m-d');
?> 
于 2012-07-09T15:58:23.253 に答える
3

あなたはそれについて完全に間違っています。date()うまくフォーマットされたSTRINGを提供します。日付を使用して計算を行う場合は、ネイティブのPHP日付/時刻値を使用する必要があります。これは単純な整数(UNIXタイムスタンプ)です。

そのUNIXタイムスタンプ(のデフォルト値date())を取得し、それを文字列に変換し、その文字列を分解し、別の順序で文字列を再結合し、次にそれをタイムスタンプに変換し、次にタイムスタンプを別のフォーマットされた文字列に変換します。それはあなたが通りを渡ることができるように500マイルのロードトリップに行くようなものです。

単純にできない理由:

$new_date = date('d/m/Y', strtotime('+3 month'));

コードスニペットの他のすべてを削除しますか?

于 2012-07-09T15:59:07.123 に答える
-4

あなたの代わりに、日付をタイムスタンプに変換し、新しい日付を秒単位で追加します (つまり、3 か月は 60 * 60 * 24 * 90 = 7 776 000 秒です)。その後、日付に変換します:P

于 2012-07-09T15:59:54.893 に答える