2012-04-12 16 views
5

Ho scritto questo pezzo di codicePHP Data strtotime non funziona

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

$date = 2012-04-12 
$days = 15 

Sto cercando di aggiungere $days (15 giorni) per la data (2012-04-12) Mi aspetto di ottenere 2012-04-27 e questo codice mi restituisce 2012-04-12, Che cosa sto facendo di sbagliato?

risposta

8
echo date('Y-m-d', strtotime('+15 days', strtotime('2012-04-12'))); 
+0

Grazie, proprio quello che stavo cercando :) – user979331

0

Perché non usare solo la classe DateTime?

$date = new DateTime(); 
$date->add(new DateInterval('P15D')); 
1
echo date("Y-m-d", strtotime("+$days days", $date)); 
5

Non utilizzare strtotime(). È inaffidabile, anche se in realtà non stai facendo nulla che possa davvero tornare a morderti sul sedere. Ma a seconda dello strtotime è ancora una brutta cosa, perché renderà la tua vita miserabile ad un certo punto.

Uso DateTime invece:

$now = DateTime::CreateFromFormat('Y-m-d', '2012-04-12'); 
$then = $now->add(new DateInterval('P15D')); 
$date = $then->format('Y-m-d'); 
+6

'strtotime()' non è inaffidabile; infatti, la classe DateTime lo utilizza sotto i fogli. –

+0

Sì, se sei il materiale di rilevamento automatico. Ma se hai una data in formato noto, non usare affatto lo strtotime. –

+2

Sono d'accordo con te in linea di principio, Marc, ma metto in discussione la necessità di istanziare un oggetto per fare qualcosa di così banale. Se avesse intenzione di fare cambiamenti nel fuso orario o altre operazioni più avanzate, sì, usa l'oggetto, assolutamente. Per aggiungere semplicemente qualche giorno? Meh. –

2
$date = '2012-04-12'; 
$days = 15; 
echo date('Y-m-d', strtotime("$date +$days days")); 
1

la sintassi non è corretta. Non è necessario o utile posizionare il codice su un'unica riga. In questo caso, vediamo che provare a farlo causa problemi di sintassi. Non avere paura di un paio di piccole variabili extra!

$date = '2012-04-12'; 
$days = 15; 

$ts = strtotime($date); 
$new_ts = strtotime('+'.$days.' days', $ts); 
$new_date = date('Y-m-d', $new_ts); 

Chiaro, facile da leggere, facile da eseguire il debug. Se vi piace il codice di golf, si può mettere in una sola riga, ma c'è un modo più chiaro di scriverlo:

$new_date = date (
    'Y-m-d', 
    strtotime (
     '+'.$days.' days', 
     strtotime($date) 
    ) 
); 

Documentazione