2015-08-21 12 views
12

Ho un problema strano. Quando eseguo lo strtotime, non considero la parte delle ore della data originale e restituisco sempre la mezzanotte. Ho provato a cercare ma non ho trovato nulla di specifico.PHP strtotime che restituisce sempre mezzanotte

C'è qualcosa che mi manca?

$original_date = "2015-08-07 02:00:00"; 
$next_date = date('Y-m-d H:i:s', strtotime("monday this Week +1 week", strtotime($original_date))); 

Riporta $next_date come 2015-08-14 00:00:00

+1

Non sono sicuro di come correggerlo, ma dando 'strtotime' un giorno specifico, come Lunedi imposta a Lunedi 00:00:00 e poi gli altri calcoli che usano. – AbraCadaver

risposta

5

Prova questo, aggiungere il tempo che si desidera recuperare nel prossimo Data,.

$original_date = "2015-08-07 02:00:00"; 
echo $next_date = date('Y-m-d H:i:s', strtotime("monday this Week 02:00:00 +1 week", strtotime($original_date))); 
+0

in realtà quando ha detto lunedì questa settimana, ci vorrà solo la data e aggiungiamo 00:00:00 a mezzanotte internamente, quindi abbiamo appena aggiunto il tempo nel minuto. –

+0

Questo funziona! Consiglieresti di aggiungere sempre l'ora come coperta di sicurezza? – Kitara

+0

@Kitara si dovrebbe sempre aggiungerlo quando si desidera mantenere le ore, i minuti e i secondi. –

3

monday this week +1 week presuppone che stai cercando mezzanotte del lunedi della settimana del passato nel tempo. Se si desidera mantenere la parte ora del tempo, quindi è possibile aggiungere nel formato che date perché dovrebbe sempre essere la stessa in $original_date

date('Y-m-d ' . date('H:i:s', strtotime($original_date)), strtotime("monday this Week +1 week", strtotime($original_date))); 
+0

Ciao, non ha funzionato per me l'output è stato 2015-08-10 19:33:35. Modifico fino ad oggi ('Y-m-d', strtotime ("lunedi questa settimana +1 settimana", strtotime ($ original_date))). ' '.date (' H: i: s ', strtotime ($ original_date)) e ha funzionato. – Kitara

+0

@Kitara che funziona anche, mi mancava la chiamata 'strtotime' – FuzzyTree

3

Quando si utilizza monday in strtotime stai azzerare il tempo di tornare su 00:00:00. Dovrai passare esplicitamente l'ora nel tuo date o strtotime per ottenere il comportamento desiderato. Vedere this same question per un problema simile.

$next_date = date('Y-m-d H:i:s', strtotime("monday this Week +1 week " . date('H:i:s', strtotime($original_date)), strtotime($original_date))) 
3
$date = strtotime('2018-08-14 02:00:00'); 
$next_date = date('Y-m-d H:i:s', strtotime("monday this Week 02:00:00 +1 week", $date)); // 2018-08-20 02:00:00