Voglio solo verificare se time()
restituisce un timestamp UTC/GMT o devo utilizzare date_default_timezone_set()
?PHP time() restituisce un timestamp GMT/UTC?
risposta
time
restituisce un timestamp UNIX, che è indipendente dal fuso orario. Poiché un timestamp UNIX indica i secondi dal 1970 UTC si potrebbe dire che è UTC, ma in realtà non ha fuso orario.
Per essere veramente chiari, un timestamp UNIX è lo stesso valore in tutto il mondo in qualsiasi momento. Al momento della scrittura è 1296096875
a Tokyo, Londra e New York. Per convertire questo in un tempo "leggibile", devi specificare il fuso orario in cui desideri visualizzarlo. 1296096875
a Tokyo è 2011-01-27 11:54:35
, a Londra è 2011-01-27 02:54:35
ea New York è 2011-01-26 21:54:35
.
In effetti si sta di solito si tratta di (un mix di) questi concetti quando si maneggiano i tempi:
- punti assoluti nel tempo, che mi piace fare riferimento a come punti nella storia umana
- ora locale, che mi piace fare riferimento a come tempo di orologio da parete
- timestamp completi in qualsiasi formato che esprimono un assoluto punto nella storia umana
- incompleta tempo dell'orologio di parete locale
tempo I dettagli simili:
-------+-------------------+-------+--------+----------------+------>
| | | | |
Dinosaurs died Jesus born Y2K Mars colonised ???
(non in scala)
Un punto assoluto su questa linea può essere espressa come :
- 1.296.096,875 mila
- 27 Gennaio 2011 02:54:35 Europe/London
Entrambi i formati esprimere lo stesso punto in assoluto nel tempo in diverse notazioni.Il primo è un semplice contatore è iniziata all'incirca qui:
start of UNIX epoch
|
-------+-------------------+------++--------+----------------+------>
| | | | |
Dinosaurs died Jesus born Y2K Mars colonised ???
Quest'ultima è molto più complicata ma ugualmente valido ed espressivo contatore è iniziata all'incirca qui:
start of Gregorian calendar
|
-------+-------------------+-------+--------+----------------+------>
| | | | |
Dinosaurs died Jesus born Y2K Mars colonised ???
timestamp UNIX sono semplici. Sono un contatore iniziato in un momento specifico e che continua ad aumentare di 1 ogni secondo (per la definizione ufficiale di cosa sia un secondo). Immagina che qualcuno a Londra abbia iniziato un cronometro alla mezzanotte del 1 gennaio 1970, che è ancora in corso. Questo è più o meno ciò che è un timestamp UNIX. Tutti usano lo stesso valore di quel cronometro.
Il tempo di orologio da parete umano leggibile è più complicato, ed è anche più complicato dal fatto che è abbreviato e parti di esso omesse nell'uso quotidiano. 02:54:35 significa quasi nulla sulla timeline nella foto sopra. 27 gennaio 2011 02:54:35 è già molto più specifico, ma potrebbe comunque significare una varietà di punti diversi su questa linea. "Quando l'orologio ha colpito 02:54:35 il 27 gennaio 2011 a Londra, Europa" ora è finalmente un punto assoluto inequivocabile su questa linea, perché c'è solo un punto nel tempo in cui questo era vero.
Quindi, i fusi orari sono un "modificatore" di "tempi dell'orologio a muro" che sono necessari per esprimere un punto temporale unico e univoco utilizzando una notazione calendario e ora/minuto/secondo. Senza un fuso orario un timestamp in tale formato è ambiguo, perché l'orologio ha colpito 02:54:35 il 27 gennaio 2011 in tutti i paesi del mondo in momenti diversi.
Un timestamp UNIX intrinsecamente non presenta questo problema.
convertire da un timestamp UNIX a un tempo di orologio da parete leggibile, è necessario specificare quale fuso orario vuoi l'ora visualizzata. Per convertire da tempo orologio da parete per un timestamp UNIX, è necessario conoscere il fuso orario in cui dovrebbe essere l'ora dell'orologio a muro. È necessario includere il fuso orario ogni volta con ciascuna di tali conversioni oppure impostare il fuso orario predefinito da utilizzare con date_default_timezone_set
.
"restituisce l'ora corrente misurata nel numero di secondi dalla Unix Epoch (1 gennaio 1970 00:00:00 GMT)."
Quindi credo che la risposta alla tua domanda sia sì.
restituisce l'ora corrente misurata nel numero di secondi dalla Unix Epoch (1 Gennaio 1970 00:00:00 GMT).
Dal PHP 5.1.0 (quando sono state riscritte le funzioni di data/ora), ogni chiamata a una funzione data/ora genererà un E_NOTICE se il fuso orario non è valido, e/o un messaggio E_WARNING se si utilizzano le impostazioni di sistema o la variabile di ambiente TZ.
Quindi, al fine di ottenere un timestamp UTC si dovrebbe verificare ciò che il fuso orario corrente è e lavorare fuori di quella o basta usare:
$utc_str = gmdate("M d Y H:i:s", time());
$utc = strtotime($utc_str);
sia time() che strtotime (gmdate ("M d Y H: i: s", time())) restituiscono lo stesso risultato: - \ –
Essi * possono * a seconda di come si imposta il fuso orario, ma non sempre. Vedi questi per ulteriori chiarimenti: http://us3.php.net/manual/en/function.gmdate.php – Julian
- 1. Batch: Timestamp a UNIX Time
- 2. MySql TimeStamp e JavaScript Time
- 3. timestamp tra JavaScript e PHP
- 4. php get time date future
- 5. Conversione del timestamp Unix in stringa con Joda Time
- 6. Esiste MySQL in Oracle TIMESTAMP WITH TIME ZONE?
- 7. Che differenza tra i tipi DATE, TIME, DATETIME e TIMESTAMP
- 8. Convertire questa stringa a timestamp PHP
- 9. Come aggiornare una colonna TIMESTAMP a TIMESTAMP WITH TIME ZONE in Oracle
- 10. data php da UNIX timestamp
- 11. Time.time() di Python restituisce un timestamp in UTC?
- 12. PHP - Compilatore Just in time Vs Interpreter
- 13. Perché strtotime ('') e strtotime ('.') Restituiscono un timestamp?
- 14. Come convertire il tempo MySQL in UNIX timestamp usando PHP?
- 15. ora e data da timestamp ottenendo con php
- 16. Converti un timestamp unix in una data leggibile in PHP?
- 17. Come ottengo un timestamp unix dall'ora della data di PHP?
- 18. jQuery Tempo fa da un timestamp?
- 19. PHP Data timestamp al fuso orario dell'utente
- 20. Timestamp: iso8601 vs unix timestamp
- 21. Cosa restituisce Xdebug in PHP?
- 22. Perché i timestamp di PHP e Javascript non corrispondono?
- 23. new Date(). GetTime() non restituisce timestamp in millisecondi
- 24. PHP PDO: query SQL che non restituisce il risultato previsto
- 25. Restituisce il timestamp corrente di 11 cifre in Python
- 26. Funzione PHP 'return' non restituisce
- 27. Funzione PHP restituisce due array
- 28. PHP in_array() restituisce sempre false
- 29. Perché srand (time()) è un cattivo seme?
- 30. Ottenere timestamp corrente con millisecondi
Non è quello che dici essere in conflitto con se stesso? "time restituisce un timestamp UNIX, che è indipendente dal fuso orario ..." e quindi "Sarà calcolato in base al fuso orario impostato, quindi, se il fuso orario è impostato in modo errato, il timestamp sarà disattivato ..." Dissonanza cognitiva. – jayarjo
Il formato * * di un timestamp UNIX è indipendente dal fuso orario. Un timestamp UNIX esprime un punto unico e assoluto nella storia umana. Tuttavia, per arrivare a questo timestamp * da "wall clock time" * (ad esempio "26 gennaio 2011 21:54:35"), è necessario prendere in considerazione il fuso orario di questo orologio a muro.Ammetto che questo è espresso in qualche modo poco chiaro. – deceze
Ho riscritto e chiarito * un po '*. :) – deceze