日付に日数を追加する


124

現在の日付に日数を追加したい:次のコードを使用しています:

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

しかし、適切な日付を取得する代わりに、これを取得しています: 2592000

提案してください。




4
括弧で囲んだタグ名を使用[php] [date] addして検索します(検索ボックスなど)。このような質問に対する答えはたくさんあります。
ミケル

回答:


247

これは

echo date('Y-m-d', strtotime("+30 days"));

strtotime

アメリカ英語の日付形式を含む文字列が指定されていることを期待し、その形式をUnixタイムスタンプ(1970年1月1日00:00:00 UTCからの秒数)に解析しようとします。 nowが指定されていない場合は現在の時刻。

ながら date

指定された整数タイムスタンプを使用して、またはタイムスタンプが指定されていない場合は現在の時刻を使用して、指定されたフォーマット文字列に従ってフォーマットされた文字列を返します。

のマニュアルページを参照してください

およびそれらの関数シグネチャ。


これは、夏時間やその他の面白いカレンダーアイテムを通過するときに問題を引き起こすと思います。並べ替えはコンテキストに依存します。30の24時間ブロックを探しているかどうかを考える必要があります。これは、夏時間の日を通過すると、午後11時になります。
JJ Rohrer 2014

1
@JJRohrerいいえ、それはしません。strtotime構成されたタイムゾーンのすべてのDSTが考慮されます。DSTは、次のOPのような場合にのみ問題になります:stackoverflow.com/questions/4066035
Gordon

ポイントを取る。私はあなたが参照した質問に少し近いものを解決しようとしてこの質問に到着しました。上記のコメントで、日付の計算を真剣に考えることを他の人に考えさせてください-すべての例外を忘れがちです。
JJ Rohrer 2014

64

これはいいかも

function addDayswithdate($date,$days){

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

}

4
上記のソリューションは、簡単なソリューションが必要で、関数を作成したくない場合にも、1行に圧縮できます。echo date( "Ymd"、strtotime( "+ 12days"、strtotime(20130101)))
Mayank Jaiswal

46
$date = new DateTime();
$date->modify('+1 week');
print $date->format('Y-m-d H:i:s');

または print date('Y-m-d H:i:s', mktime(date("H"), date("i"), date("s"), date("m"), date("d") + 7, date("Y"));


この方法は、夏時間をまたぐことを扱います。PHPがうるう秒などの他の時間の癖を考慮しているかどうかはわかりませんが、必要に応じて、カレンダーの日付を処理する場合は、DateTimeとStrToTimeを使用したほうがよいでしょう。
JJ Rohrer 2014

@chxこのソリューションは、日付をより慎重に許可します。例:new DateTime( '2016-12-09 10:35:58'); それはデータベースのタイムスタンプから来ています...
mshaffer '19 / 12/19


10

特定の日付から5日後の日付が必要な場合は、次のように追加することもできます。

次のような日付の変数があります(入力またはDBから取得したか、ハードコードしただけです)。

$today = "2015-06-15"; // Or can put $today = date ("Y-m-d");

$fiveDays = date ("Y-m-d", strtotime ($today ."+5 days"));

echo $fiveDays; // Will output 2015-06-20

7

夏時間のために時計が変わると、日数を計算するだけで問題が発生する可能性があることに注意してください。

これを処理する小さなphp関数を次に示します。

function add_days($date, $days) {
    $timeStamp = strtotime(date('Y-m-d',$date));
    $timeStamp+= 24 * 60 * 60 * $days;

    // ...clock change....
    if (date("I",$timeStamp) != date("I",$date)) {
        if (date("I",$date)=="1") { 
            // summer to winter, add an hour
            $timeStamp+= 60 * 60; 
        } else {
            // summer to winter, deduct an hour
            $timeStamp-= 60 * 60;           
        } // if
    } // if
    $cur_dat = mktime(0, 0, 0, 
                      date("n", $timeStamp), 
                      date("j", $timeStamp), 
                      date("Y", $timeStamp)
                     ); 
    return $cur_dat;
}




6

私はこれが古い質問であることを知っていますが、PHP <5.3の場合はこれを試すことができます:

$date = '05/07/2013';
$add_days = 7;
$date = date('Y-m-d',strtotime($date) + (24*3600*$add_days)); //my preferred method
//or
$date = date('Y-m-d',strtotime($date.' +'.$add_days.' days');

5

PHPで構築されたDateTimeクラスを使用できます。「追加」と呼ばれるメソッドがあり、それがどのように使用されるかはマニュアルに完全に示されています:http : //www.php.net/manual/en/datetime.add.php

ただし、PHP 5.3.0が必要です。


5
$date = "04/28/2013 07:30:00";

$dates = explode(" ",$date);

$date = strtotime($dates[0]);

$date = strtotime("+6 days", $date);

echo date('m/d/Y', $date)." ".$dates[1];

4

これを試してみてください。

$i=30;
echo  date("Y-m-d",mktime(0,0,0,date('m'),date('d')+$i,date('Y')));

3

シンプルで最高

echo date('Y-m-d H:i:s')."\n";
echo "<br>";
echo date('Y-m-d H:i:s', mktime(date('H'),date('i'),date('s'), date('m'),date('d')+30,date('Y')))."\n";

これを試して


3
//add the two day

$date = "**2-4-2016**"; //stored into date to variable

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

//print output
**4-4-2016**

2

このaddDate()関数を使用して、日、月、または年を加算または減算します(補助関数reformatDate()も必要になります)

/**
 * $date self explanatory
 * $diff the difference to add or subtract: e.g. '2 days' or '-1 month'
 * $format the format for $date
 **/
    function addDate($date = '', $diff = '', $format = "d/m/Y") {
        if (empty($date) || empty($diff))
            return false;
        $formatedDate = reformatDate($date, $format, $to_format = 'Y-m-d H:i:s');
        $newdate = strtotime($diff, strtotime($formatedDate));
        return date($format, $newdate);
    }
    //Aux function
    function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Y-m-d') {
        $date_aux = date_create_from_format($from_format, $date);
        return date_format($date_aux,$to_format);
    }

注:php> = 5.3の場合のみ



1
//Set time zone
date_default_timezone_set("asia/kolkata");
$pastdate='2016-07-20';
$addYear=1;
$addMonth=3;
$addWeek=2;
$addDays=5;
$newdate=date('Y-m-d', strtotime($pastdate.' +'.$addYear.' years +'.$addMonth. ' months +'.$addWeek.' weeks +'.$addDays.' days'));
echo $newdate;

1

これは古い質問ですが、この方法では多くの状況が発生し、堅牢であるようです。PHP 5.3.0以降が必要です。

$EndDateTime = DateTime::createFromFormat('d/m/Y', "16/07/2017");
$EndDateTime->modify('+6 days');
echo $EndDateTime->format('d/m/Y');

日付文字列には任意のタイプのフォーマットを使用できますが、これは機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.