Fügen Sie einem Datum die Anzahl der Tage hinzu


124

Ich möchte dem aktuellen Datum die Anzahl der Tage hinzufügen: Ich verwende folgenden Code:

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

Aber anstatt das richtige Datum zu bekommen, bekomme ich folgendes: 2592000

Bitte vorschlagen.




4
Suchen Sie mit Tag-Namen in Klammern, z. B. [php] [date] addim Suchfeld. Auf solche Fragen finden Sie viele Antworten.
Mikel

Antworten:


247

Das sollte sein

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

strtotime

erwartet eine Zeichenfolge mit einem US-englischen Datumsformat und versucht, dieses Format in einen Unix-Zeitstempel (die Anzahl der Sekunden seit dem 1. Januar 1970 00:00:00 UTC) zu analysieren, bezogen auf den jetzt angegebenen Zeitstempel oder den aktuelle Zeit, wenn jetzt nicht geliefert wird.

während date

Gibt eine Zeichenfolge zurück, die gemäß der angegebenen Formatzeichenfolge unter Verwendung des angegebenen ganzzahligen Zeitstempels oder der aktuellen Zeit formatiert ist, wenn kein Zeitstempel angegeben ist.

Siehe die Handbuchseiten für

und ihre Funktionssignaturen.


Ich denke, dies wird Probleme beim Überqueren der Sommerzeit und anderer lustiger Kalenderelemente verursachen. Es hängt irgendwie vom Kontext ab. Sie müssen darüber nachdenken, ob Sie nach 30 24-Stunden-Blöcken suchen, die Sie beim Überqueren eines Tages mit Sommerzeit möglicherweise um 23:00 Uhr erreichen.
JJ Rohrer

1
@JJRohrer nein, das wird es nicht. strtotimeberücksichtigt alle Sommerzeiten für die konfigurierte Zeitzone. Die Sommerzeit ist nur dann ein Problem, wenn Sie so etwas wie dieses OP tun: stackoverflow.com/questions/4066035
Gordon

Punkt genommen. Ich bin zu dieser Frage gekommen und habe versucht, etwas zu lösen, das der von Ihnen genannten Frage etwas näher kommt. Ich hoffe, dass mein obiger Kommentar andere dazu bringt, ihre Datumsberechnungen ernst zu nehmen - es ist leicht, alle Ausnahmen zu vergessen.
JJ Rohrer

64

Dieser könnte gut sein

function addDayswithdate($date,$days){

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

}

4
Die obige Lösung kann auch in einer Zeile komprimiert werden, wenn Sie eine schnelle Lösung benötigen und keine Funktion erstellen möchten. Echo-Datum ("Ymd", Strtotime ("+ 12 Tage", Strtotime (20130101)))
Mayank Jaiswal

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

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


Diese Methode befasst sich mit der Überquerung der Sommerzeit. Ich bin mir nicht sicher, ob PHP andere Zeitprobleme wie Schaltsekunden berücksichtigt, aber je nach Ihren Anforderungen ist es wahrscheinlich besser, DateTime als StrToTime zu verwenden, wenn Sie sich mit Kalendertagen befassen.
JJ Rohrer

@chx Diese Lösung erlaubt auch sorgfältiger ein Datum; zB neue DateTime ('2016-12-09 10:35:58'); das kommt von einem Datenbank-Zeitstempel ...
mshaffer

10
$today=date('d-m-Y');
$next_date= date('d-m-Y', strtotime($today. ' + 90 days'));
echo $next_date;

10

Sie können auch Folgendes hinzufügen, wenn Sie das Datum 5 Tage nach einem bestimmten Datum möchten:

Sie haben eine Variable mit einem Datum wie diesem (von einer Eingabe oder Datenbank erhalten oder nur fest codiert):

$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

Beachten Sie, dass die Änderung der Uhr aufgrund der Sommerzeit zu Problemen führen kann, wenn Sie nur die Tage berechnen.

Hier ist eine kleine PHP-Funktion, die sich darum kümmert:

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

Sie können strtotime () verwenden
$data['created'] = date('Y-m-d H:m:s', strtotime('+1 week'));


6

Ich weiß, dass dies eine alte Frage ist, aber für PHP <5.3 können Sie dies versuchen:

$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
$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

Sie können dies versuchen.

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

3

Einfach und am besten

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";

Versuche dies


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

Verwenden Sie diese Funktion addDate (), um Tage, Monate oder Jahre zu addieren oder zu subtrahieren (Sie benötigen auch die Zusatzfunktion 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);
    }

Hinweis: nur für 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

Obwohl dies eine alte Frage ist, würde diese Vorgehensweise viele Situationen in Anspruch nehmen und scheint robust zu sein. Sie benötigen PHP 5.3.0 oder höher.

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

Sie können ein beliebiges Format für die Datumszeichenfolge festlegen, und dies würde funktionieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.