5

私はこのコードを書きました

echo date("Y-m-d", strtotime($date, strtotime("+ " . $days . " days")));

$date = 2012-04-12
$days = 15

$days取得予定の日付 ( ) に (15 日)を追加2012-04-12しよう2012-04-27としていますが、このコードは を返します2012-04-12。何が間違っていますか?

4

6 に答える 6

8
echo date('Y-m-d', strtotime('+15 days', strtotime('2012-04-12')));
于 2012-04-12T18:16:25.730 に答える
5

strtotime() を使用しないでください。それは信頼できませんが、あなたは本当に戻ってきて尻を噛むようなことをしていません. しかし、strtotime に依存することは依然として悪いことです。

代わりにDateTimeを使用します。

$now = DateTime::CreateFromFormat('Y-m-d', '2012-04-12');
$then = $now->add(new DateInterval('P15D'));
$date = $then->format('Y-m-d');
于 2012-04-12T18:13:57.770 に答える
2
$date = '2012-04-12';
$days = 15;
echo date('Y-m-d', strtotime("$date +$days days") );
于 2012-04-12T18:15:25.293 に答える
1
echo date("Y-m-d", strtotime("+$days days", $date));
于 2012-04-12T18:13:43.627 に答える
1

構文が正しくありません。コードをすべて 1 行に配置する必要はありませんし、役に立ちません。この場合、そうしようとすると構文の問題が発生することがわかります。余分な小さな変数がいくつかあることを恐れないでください!

$date = '2012-04-12';
$days = 15;

$ts = strtotime($date);
$new_ts = strtotime('+'.$days.' days', $ts);
$new_date = date('Y-m-d', $new_ts);

明確で、読みやすく、デバッグしやすい。コードゴルフが好きなら、それを 1 行にまとめることもできますが、より明確に記述する方法があります。

$new_date = date (
    'Y-m-d',
    strtotime (
        '+'.$days.' days',
        strtotime($date)
    )
);

ドキュメンテーション

于 2012-04-12T18:17:40.940 に答える
0

DateTimeクラスを使用しないのはなぜですか?

$date = new DateTime();
$date->add(new DateInterval('P15D'));
于 2012-04-12T18:13:20.843 に答える