2012-02-27 12 views
6

Sto riscontrando un problema qui ..php - Un'ora prima del previsto Datetime

Supposto che abbia questo tipo di datetime.

 

$date = strtotime($date); 
 

ho bisogno di questo per essere convertito in formato Unix timestamp che un'ora earlier..I provato

 

$date = strtotime($date-86400) 
 

, ma mi sembrava che è sbagliato. Ha restituito 0 quando sono entrato di nascosto nel tavolo.

Qual è il modo appropriato per raggiungere questo obiettivo?

Grazie.

+0

Ci sono 3600 secondi in un'ora e 86400 secondi in un solo giorno. Devi sottrarre 3600 secondi. 'strtotime ($ date) - 3600;' – Cheery

risposta

4

strtotime ti darà il timestamp unix della tua data. Da questa data e ora, è quindi sottrarre la vostra ora:

$date = strtotime($date) - 3600; // 3600 = 60 * 60 

Se si chiama strtotime($date - 3600), è come ottenere il tempo per -3600 (ad esempio strtotime(-3600)), che non ha alcun senso perché strtotime aspetta una stringa come primo argomento.

+2

Ci sono 3600 secondi in un'ora e 86400 secondi in un giorno. – Cheery

+0

Ah sì ... ero totalmente in disordine ... Non dovrei contare 60 * 60 * 24 ... che mi dà secondi in un giorno ... stupido :( – foxns7

5

si potrebbe fare:

 

$testDateStr = strtotime($date); 
$finalDate = date("Y-m-d H:i:s", strtotime("-1 hour", $testDateStr)); 
 

Speranza che aiuta

+0

Mentre questa risposta è piuttosto auto- esplicativo per coloro che hanno familiarità con 'date()' e 'strtotime()', migliorerebbe la tua risposta con qualche spiegazione – mickmackusa

3

86,4 mila secondo è di un giorno, non è un'ora.

L'output di strtotime() è un timestamp unix. 3600 secondi prima è quel timestamp meno un'ora. Quindi:

$date = strtotime($somestring); 

$hourago = $date - 3600; 

Oppure, a seconda del formato originale di $ somestring:

$hourago = strtotime($somestring . " - 1 hour"); 

E non dimenticare date_default_timezone_set()

1

Prova questa ricerca

$query= "insert into yourTable(otherValues, date) 
values (otherFields, DATE_ADD(NOW(),INTERVAL -1 hour)) 

Usa DATE_ADD inserire un valore di data che è 1 ora in meno del tempo corrente.

+0

Downvoted perché OP non richiede una soluzione 'mysql' né un' INSERT'. Tutte le risposte dovrebbe anche includere una sorta di spiegazione in modo che i lettori possano comprendere appieno/beneficiare della risposta/approccio. – mickmackusa

0

Nessuno ha offerto una soluzione di oggetto DateTime, quindi lo farò. È il metodo più moderno per la gestione di datetime e non richiede alcun calcolo dei minuti & secondi.

Mi piace sempre inserire una sorta di dichiarazione del fuso orario per rendere le cose definitive. L'ora legale è normalmente una preoccupazione per le manipolazioni datetime, ma probabilmente va bene in questo caso. Sentiti libero di modificare il fuso orario per il tuo caso.

PHP link manuali:

Codice (tra cui ti formattato me per il confronto) Demo Link:

$now=new DateTime('NOW UTC'); 

$now_stamp=$now->getTimestamp(); 
$formatted_now=$now->format("Y-m-d H:i:s"); 
echo "$now_stamp ($formatted_now)\n"; 

$hour_ago=$now->modify('-1 hour'); 
$hour_ago_stamp=$hour_ago->getTimestamp(); 
$formatted_hour_ago=$hour_ago->format("Y-m-d H:i:s"); 
echo "$hour_ago_stamp ($formatted_hour_ago)"; 

uscita:

1492687193 (2017-04-20 11:19:53) 
1492683593 (2017-04-20 10:19:53) 
Problemi correlati