2009-09-08 8 views
106

mio codice per aggiungere un giorno a una data restituisce una data prima del giorno di aggiungere: 2009-09-30 20:24:00 data dopo l'aggiunta di un giorno dovrebbe essere rotolato sopra al mese successivo: 1970-01-01 17:33:29L'aggiunta di un giorno per una data

<?php 

    //add day to date test for month roll over 

    $stop_date = date('Y-m-d H:i:s', strtotime("2009-09-30 20:24:00")); 

    echo 'date before day adding: '.$stop_date; 

    $stop_date = date('Y-m-d H:i:s', strtotime('+1 day', $stop_date)); 

    echo ' date after adding one day. SHOULD be rolled over to the next month: '.$stop_date; 
?> 

I ho usato codice abbastanza simile prima, cosa sto facendo di sbagliato qui?

risposta

224
<?php 
$stop_date = '2009-09-30 20:24:00'; 
echo 'date before day adding: ' . $stop_date; 
$stop_date = date('Y-m-d H:i:s', strtotime($stop_date . ' +1 day')); 
echo 'date after adding 1 day: ' . $stop_date; 
?> 

Per PHP 5.2.0+, si può anche procedere come segue:

$stop_date = new DateTime('2009-09-30 20:24:00'); 
echo 'date before day adding: ' . $stop_date->format('Y-m-d H:i:s'); 
$stop_date->modify('+1 day'); 
echo 'date after adding 1 day: ' . $stop_date->format('Y-m-d H:i:s'); 
+3

Grazie. Risolto come: $ stop_date = date ('Y-m-d H: i: s', strtotime ("$ stop_date + 1 giorno")); – ian

+2

dovrebbe funzionare anche. Non mi piace usare " – w35l3y

+9

Non dovresti usare una variabile in una stringa. Dovresti usare:' date ('Ymd H: i: s', strtotime ($ stop_date. '+ 1 giorno')) 'come nella risposta che ti ha dato @ w35l3y –

2

ho sempre solo aggiungere 86400 (secondi in un giorno):

$stop_date = date('Y-m-d H:i:s', strtotime("2009-09-30 20:24:00") + 86400); 

echo 'date after adding 1 day: '.$stop_date; 

Non è il modo più destro probabilmente si potesse fare, ma funziona!

+0

Che cosa è il più destro eh ?. – ian

+0

Come gestisci i secondi bisestili quando l'aggiunta di 86400 non funzionerà in quanto ci sono 86401 secondi in quel giorno? (ok, so che succede solo ogni pochi anni, ma a seconda dell'app potrebbe essere importante) – Glen

+1

Non tutti i giorni contengono 86400 secondi. In effetti, nella maggior parte dei posti negli Stati Uniti ci sono 3600 secondi in meno o in più due volte l'anno. –

1

Mentre sono d'accordo con la risposta Doug Hays', io carillon qui per dire che il motivo per il codice non funziona perché strtotime() prevede un INT come secondo argomento, non una stringa (anche una che rappresenta una data)

Se si attiva la segnalazione di errore massimo, verrà visualizzato come "Un valore numerico non ben formato valore "errore che corrisponde al livello E_NOTICE.

71
$date = new DateTime('2000-12-31'); 

$date->modify('+1 day'); 
echo $date->format('Y-m-d') . "\n"; 
+3

Questa è una soluzione più recente -perfetta –

+0

.. .Anche se non provoca errori irreversibili durante l'esecuzione sul tuo host;) –

+0

Non chiedere scusa Alcune persone hanno postato la risposta di dame 3 anni dopo aver effettuato – Mawg

6

Prova questo

echo date('Y-m-d H:i:s',date(strtotime("+1 day", strtotime("2009-09-30 20:24:00")))); 
+0

Grazie amico, mi ha aiutato. –

5

semplice da leggere e capire così:

$original_date = "2009-09-29"; 

$time_original = strtotime($original_date); 
$time_add  = $time_original + (3600*24); //add seconds of one day 

$new_date  = date("Y-m-d", $time_add); 

echo $new_date; 
+2

Questo a volte fallire con le modifiche dell'ora legale quando la durata del giorno non è di 24 ore. –

20

soluzione più semplice:

$date = new DateTime('+1 day'); 
echo $date->format('Y-m-d H:i:s'); 
+0

Mi piace il tuo modo in un unico elemento 'echo (nuovo DateTime ('+ 1 giorno')) -> formato ('Ymd H: i: s');' – Aba

+0

@Aba Non penso che il tuo unico rivestimento funzioni in versioni precedenti di PHP perché l'ho provato e ho ricevuto un errore: errore "T_OBJECT_OPERATOR inaspettato" in PHP' –

0

Il codice seguente ottiene il primo giorno di gennaio del anno in corso (ma può essere un altro appuntamento) e aggiungi 365 giorni di tempo per quel giorno (ma può essere il numero N di giorni) utilizzando la classe DateTime e il suo metodo di modifica() e il formato():

echo (new DateTime((new DateTime())->modify('first day of January this year')->format('Y-m-d')))->modify('+365 days')->format('Y-m-d'); 
1

Il metodo modify() che può essere utilizzato per aggiungere incrementi a un esistente Valore DateTime.

Creare un nuovo DateTime oggetto con la data e l'ora correnti:

$due_dt = new DateTime(); 

Una volta ottenuto l'oggetto DateTime, è possibile manipolare il suo valore, aggiungendo o sottraendo i periodi di tempo:

$due_dt->modify('+1 day'); 

È puoi leggere di più su PHP Manual.

6

ha funzionato per me: Per Data corrente

$date = date('Y-m-d', strtotime("+1 day")); 

per anydate:

date('Y-m-d', strtotime("+1 day", strtotime($date))); 
+1

grazie per cui ha funzionato. Più semplice di tutte le soluzioni fornite. –

Problemi correlati