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.

Pankaj Khurana
quelle
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.

Gordon
quelle
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);

}
Gowri
quelle
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"));

chx
quelle
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;
Shraddha Dharmamer
quelle
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
Andy
quelle
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;
}
Björn
quelle
7

Sie könnten auch versuchen:

$date->modify("+30 days");

Insektatorisch
quelle
6

Sie können dies tun, indem Sie den Timecode bearbeiten oder strtotime () verwenden . Hier ist ein Beispiel mit strtotime.

$ data ['created'] = date ('Ymd H: i: s', strtotime ("+ 1 Woche"));

Paul Truesdell
quelle
6

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

Laxman13
quelle
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');
Fabrizio
quelle
5

Sie können die in PHP integrierte DateTime-Klasse verwenden. Es hat eine Methode namens "add", und wie es verwendet wird, wird im Handbuch ausführlich demonstriert: http://www.php.net/manual/en/datetime.add.php

Es erfordert jedoch PHP 5.3.0.

mqchen
quelle
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];
Mayank Raipure
quelle
4

Sie können dies versuchen.

$i=30;
echo  date("Y-m-d",mktime(0,0,0,date('m'),date('d')+$i,date('Y')));
J. Rob
quelle
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

user3767878
quelle
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**
Sajan Patel
quelle
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

Juancho Ramone
quelle
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;
Dharmendra Verma Webentwickler
quelle
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.

Deepak Daniel
quelle