web-dev-qa-db-ja.com

現在の日付+ 2か月

現在の日付+ 2か月を表示するために、このコードを書きました。

<?php
    $date = date("d/m/Y");
    $date = strtotime(date("d/m/Y", strtotime($date)) . "+2 months");
    $date = date("d/m/Y",$date);
    echo $date;
?>

表示されているように動作しないようです:1970/01/03。

何が悪いのですか?

ご協力いただきありがとうございます。

編集:

コメントと回答を読んだ後、私はそれを簡略化して修正しました。

<?php
    $date = date("d/m/Y", strtotime(" +2 months"));
    echo $date;
?>
17
morgi

2番目のstrtotime()呼び出しの2番目の引数がありません:

echo date('d/m/Y', strtotime('+2 months'));
35
Alix Axel

DateTimeオブジェクト を使用してみてください:

$date = new DateTime("+2 months");
echo $date->format("d/m/Y");
11
John Conde

今日が「YYYY-mm-31」で、翌月に31日がない場合は、その日の翌月が表示され、「+ 2か月」の結果ではなく「+3か月」の結果が表示されます。

これが最も安全だと思います:

$end_date=date("Y-m-d",strtotime("+2 month",strtotime(date("Y-m-01",strtotime("now") ) )));

最初に日付を1日目に変更してください。

3
Fenix Lam

DateTime-> add()またはDateTime-> modify ()

既存のDateTimeオブジェクトを使用している場合は、次のいずれかを使用できます。

// Your date
$date = new DateTime(); // empty for now or pass any date string as param

// Adding
$date->add(new DateInterval('P2M')); // where P2M means "plus 2 months"

// or even easier
$date->modify('+2 months');

// Checking
echo $date->format('Y-m-d');

PHPで月を追加することに注意してください。元の日付の日が新しい日付の合計日数よりも大きい場合、翌月にオーバーフローする可能性があります月。うるう年で年を追加すると、同じオーバーフローが発生します。どういうわけか、これはPHP開発者によるバグとは見なされず、解決策なしで文書化されています。詳細: PHP DateTime :: modify加減算月

これがオーバーフローの問題に対処するための最も適切な解決策であることがわかりました。

$day = $date->format('j');
$date->modify('first day of +2 months')->modify('+'. (min($day, $date->format('t')) - 1) .' days');
1
Alph.Dev