PHPで$ Dateに日数を追加する


215

フォームにmySQLクエリの一部として返された日付があります 2010-09-17

変数$ Date2を$ Date5に次のように設定したいと思います。

$Date2 = $Date + 1

$Date3 = $Date + 2

等..

それは返すこと2010-09-182010-09-19等...

私が試してみました

date('Y-m-d', strtotime($Date. ' + 1 day'))

しかし、これは私にBEFOREの日付を与えます$Date

別のクエリで使用できるように、日付を「Ymd」の形式で取得する正しい方法は何ですか?


回答:


446

あなたがしなければならないのは、このようなdays代わりに使用することですday

<?php
$Date = "2010-09-17";
echo date('Y-m-d', strtotime($Date. ' + 1 days'));
echo date('Y-m-d', strtotime($Date. ' + 2 days'));
?>

そしてそれは正しく出力されます:

2010-09-18
2010-09-19

7
day同様に正しく出力しますdate("Y-m-d", strtotime('2010-09-17 + 1 day'))2010-09-18date("Y-m-d", strtotime('2010-09-17 + 2 day'))2010-09-19
...-

この方法で試してみたところ、うまくいきました。私が最初に試したときに、開始日の1日前に値を取得した理由はまだわかりません。
Istari

追加する日数の変数がある場合はどうなりますか?
Carlos Martins 2014年

3
@Carlos echo date( "Ymd"、strtotime($ Date。 '+'。$ variable。 'days'));
Pradeep Kumar Prabaharan

いいえ、この方法はまったく機能しません。2004
。– gegobyte

81

PHP 5.3を使用しているDateTime場合は、オブジェクトとそのaddメソッドを使用できます。

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->add(new DateInterval('P1D')); // P1D means a period of 1 day
$Date2 = $date->format('Y-m-d');

見てみましょうDateIntervalコンストラクタあなたの日付に追加する他の期間を構築する方法を参照するには、マニュアルページを(2日は次のようになり'P2D'、3になり'P3D'、など)。

PHP 5.3がなければstrtotime、あなたはそれをあなたがした方法を使用できるはずです(私はそれをテストしました、そしてそれは5.1.6と5.2.10の両方で動作します):

$Date1 = '2010-09-17';
$Date2 = date('Y-m-d', strtotime($Date1 . " + 1 day"));
// var_dump($Date2) returns "2010-09-18"

申し訳ありませんが、ダニエルが、ウェブサーバの実行は、5.2.6をPHPので、これは動作しません
Istari

2
DateTime::constructは、strtotime日付の解析と同じメカニズムを使用するためnew DateTime("+1 day $date")、5.3を必要としないメカニズムも使用できます
Gordon

私はこれに反対票を投じるつもりはありませんでしたが、どういうわけか私はしました= /
Steven

これはphp 5.5+の実際の答えです
TheLegendaryCopyCoder

29

PHP 5.2以降では、DateTimeオブジェクトで変更を使用できます。

http://php.net/manual/en/datetime.modify.php

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->modify('+1 day');
$Date2 = $date->format('Y-m-d');

月を追加するときは注意してください...(そして、より少ない範囲で、年)


受け入れ答えはちょうどあなたが25000+日あまりにも..追加するときに、この答えは答えを与える15000+日間答えを与える
プラディープ・クマールPrabaharan

また、DateTimeImmutable()でこれをクエリすると、元のファイルを変更するリスクなしに変更されたコピーを取得できます。
Xavi Montero、2018年

17

以下は、日付の変更を示す小さなスニペットです。

$date = date("Y-m-d");
//increment 2 days
$mod_date = strtotime($date."+ 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//decrement 2 days
$mod_date = strtotime($date."- 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 month
$mod_date = strtotime($date."+ 1 months");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 year
$mod_date = strtotime($date."+ 1 years");
echo date("Y-m-d",$mod_date) . "\n";

私の関連する(quesiton)[ stackoverflow.com/q/61421783/8919244]をご覧ください。
ファイサル

8

次の形式も使用できます

strtotime("-3 days", time());
strtotime("+1 day", strtotime($date));

この方法で変更をスタックできます。

strtotime("+1 day", strtotime("+1 year", strtotime($date)));

このアプローチと他の回答のアプローチとの違いに注意してください。値+1 dayとを連結する代わりに<timestamp>、の2番目のパラメーターとしてタイムスタンプを渡すだけですstrtotime



5

これがクエリの最も簡単な解決策です

$date=date_create("2013-03-15"); // or your date string
date_add($date,date_interval_create_from_date_string("40 days"));// add number of days 
echo date_format($date,"Y-m-d"); //set date format of the result

2

これを解決する簡単な方法があります。

<?php
   $date = "2015-11-17";
   echo date('Y-m-d', strtotime($date. ' + 5 days'));
?>

出力は次のようになります。

2015-11-22

ここから解決策が見つかりました-PHPで日付を追加する方法


0

すべてが次のコードを使用する必要があります:

$nday = time() + ( 24 * 60 * 60);    
echo 'Now:       '. date('Y-m-d') ."\n";    
echo 'Next Day: '. date('Y-m-d', $nday) ."\n";

1
このようにしてはなりません。最終的にはうるう秒に関する問題が発生します
Nathan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.