Aggiungi il numero di giorni a una data


124

Voglio aggiungere il numero di giorni alla data corrente: sto usando il seguente codice:

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

Ma invece di ottenere la data corretta sto ottenendo questo: 2592000

Per favore, suggerisci




4
cerca usando i nomi dei tag racchiusi tra parentesi, ad es. [php] [date] addnella casella di ricerca. Troverai molte risposte a domande come questa.
Mikel,

Risposte:


247

Questo dovrebbe essere

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

strtotime

si aspetta di ricevere una stringa contenente un formato di data inglese americano e proverà ad analizzare quel formato in un timestamp Unix (il numero di secondi dal 1 ° gennaio 00:00:00:00 UTC), relativo al timestamp indicato in ora corrente se ora non viene fornita.

mentre date

Restituisce una stringa formattata in base alla stringa di formato specificata utilizzando il timestamp intero specificato o l'ora corrente se non viene fornito alcun timestamp.

Vedere le pagine del manuale per

e le loro firme di funzione.


Penso che questo causerà problemi quando si attraversano gli orari dell'ora legale e altri elementi del calendario divertenti. In un certo senso dipende dal contesto. Devi pensare se stai cercando 30 blocchi di 24 ore, che, quando attraversi un giorno dell'ora legale, potrebbero arrivare alle 23:00.
JJ Rohrer,

1
@JJRohrer no, non lo farà. strtotimeprenderà in considerazione qualsiasi ora legale per il fuso orario configurato. L'ora legale è solo un problema quando si fa qualcosa di simile a questo OP: stackoverflow.com/questions/4066035
Gordon

Punto preso. Sono arrivato a questa domanda cercando di risolvere qualcosa un po 'più vicino alla domanda a cui hai fatto riferimento. Spero che il mio commento di cui sopra porti gli altri a pensare di prendere sul serio i calcoli della data: è facile dimenticare tutte le eccezioni.
JJ Rohrer,

64

Questo potrebbe essere buono

function addDayswithdate($date,$days){

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

}

4
La soluzione sopra può essere compattata anche in una riga se hai bisogno di una soluzione rapida e non vuoi creare una funzione. data dell'eco ("Ymd", strtotime ("+ 12days", strtotime (20130101)))
Mayank Jaiswal

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

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


Questo metodo si rivolge all'attraversamento dell'ora legale. Non sono sicuro che php conti per altre stranezze temporali, come i secondi bisestili, ma, a seconda delle tue esigenze, probabilmente stai meglio usando DateTime vs. StrToTime se hai a che fare con i giorni di calendario.
JJ Rohrer,

@chx Questa soluzione consente anche più attentamente una data; ad esempio, nuovo DateTime ('2016-12-09 10:35:58'); che proviene da un timestamp del database ...
mshaffer

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

10

Puoi aggiungere anche questo, se vuoi la data a 5 giorni da una data specifica:

Hai una variabile con una data come questa (ottenuta da un input o DB o semplicemente codificata):

$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

Tieni presente che il cambio dell'orologio cambia a causa dell'ora legale potrebbe darti alcuni problemi quando si calcola solo i giorni.

Ecco una piccola funzione php che si occupa di questo:

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

Puoi farlo manipolando il timecode o usando strtotime () . Ecco un esempio usando strtotime.

$ data ['creato'] = data ('Ymd H: i: s', strtotime ("+ 1 settimana"));


6

Puoi usare strtotime ()
$data['created'] = date('Y-m-d H:m:s', strtotime('+1 week'));


6

So che questa è una vecchia domanda, ma per PHP <5.3 potresti provare questo:

$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

Puoi provare questo.

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

3

Semplice e migliore

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

Prova questo


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

Utilizzare questa funzione addDate () per aggiungere o sottrarre giorni, mese o anni (è necessaria anche la funzione ausiliaria 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);
    }

Nota: solo per 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

Anche se questa è una vecchia domanda, questo modo di fare richiederebbe molte situazioni e sembra essere robusto. Devi avere PHP 5.3.0 o successivo.

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

Puoi avere qualsiasi tipo di formato per la stringa della data e questo funzionerebbe.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.