sto memorizzare l'UTC risale nel DB utilizzando:Convertire UTC risale dell'ora locale in PHP
$utc = gmdate("M d Y h:i:s A");
e poi voglio convertire la data UTC salvato ora locale del client.
Come posso farlo?
Grazie
sto memorizzare l'UTC risale nel DB utilizzando:Convertire UTC risale dell'ora locale in PHP
$utc = gmdate("M d Y h:i:s A");
e poi voglio convertire la data UTC salvato ora locale del client.
Come posso farlo?
Grazie
date()
e localtime()
entrambi utilizzano il fuso orario locale per il server a meno che sovrascritto; puoi ignorare il fuso orario utilizzato con date_default_timezone_set()
.
http://www.php.net/manual/en/function.date-default-timezone-set.php
funzione di PHP strtotime
sarà interpretare i codici di fuso orario, come UTC. Se ottieni la data dal database/client senza il codice del fuso orario, ma sai che è UTC, puoi aggiungerla.
Supponendo che si ottiene la data con il codice di timestamp (come "Ven 23 Marzo 2012 22:23:03 GMT-0700 (PDT)", che è ciò che il codice JavaScript ""+(new Date())
dà):
$time = strtotime($dateWithTimeZone);
$dateInLocal = date("Y-m-d H:i:s", $time);
O se non lo fai, che rischia da MySQL, quindi:
$time = strtotime($dateInUTC.' UTC');
$dateInLocal = date("Y-m-d H:i:s", $time);
Il secondo snippet di codice è quello che mi serviva per convertire l'output della funzione 'datetime()' di sqlite da UTC a localtime. – fuenfundachtzig
Grazie, hai risparmiato le mie ore. – Abbas
in primo luogo, ottenere la data in UTC - hai già fatto che così questo passo sarebbe davvero essere solo una chiamata di database:
Successivamente, impostare il fuso orario locale in PHP:
$timezone = "America/Guayaquil";
date_default_timezone_set($timezone);
Ed ora ottenere l'offset in secondi:
$offset = date('Z', strtotime($utc));
print "offset: $offset \n";
Infine, aggiungere l'offset per il timestamp intero del datetime originale:
print "LOCAL: " . date('r', strtotime($utc) + $offset) . "\n";
L'aritmetica data non è necessaria se si desidera visualizzare lo stesso timestamp in fusi orari diversi:
$format = "M d, Y h:ia";
$timestamp = gmdate($format);
date_default_timezone_set("UTC");
$utc_datetime = date($format, $timestamp);
date_default_timezone_set("America/Guayaquil");
$local_datetime = date($format, $timestamp);
Convertire il datetime UTC in America/Denver
// create a $dt object with the UTC timezone
$dt = new DateTime('2016-12-12 12:12:12', new DateTimeZone('UTC'));
// change the timezone of the object without changing it's time
$dt->setTimezone(new DateTimeZone('America/Denver'));
// format the datetime
$dt->format('Y-m-d H:i:s T');
time()
restituisce il unix timestamp, che è un numero, non ha fuso orario.
date('Y-m-d H:i:s T')
restituisce la data nel fuso orario locale corrente.
gmdate('Y-m-d H:i:s T')
restituisce la data in UTC
date_default_timezone_set()
cambia l'attuale fuso orario locale
cambiare una volta in un fuso orario
// create a $dt object with the America/Denver timezone
$dt = new DateTime('2016-12-12 12:12:12', new DateTimeZone('America/Denver'));
// change the timezone of the object without changing it's time
$dt->setTimezone(new DateTimeZone('UTC'));
// format the datetime
$dt->format('Y-m-d H:i:s T');
qui potete vedere tutti i fusi orari disponibili
https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
qui sono tutte le opzioni di formattazione
http://php.net/manual/en/function.date.php
Aggiornamento PHP DB fuso orario (in linux)
sudo pecl install timezonedb
Questa dovrebbe essere la risposta alla domanda sopra .. –
Questo in realtà risponde alla domanda piuttosto che offrire "come ottenere l'ora locale". – ChristoKiwi
devo conservare data nel DB in formato UTC, ma poi li mostro per l'utente finale nella loro fuso orario locale
// retrieve
$d = (new \DateTime($val . ' UTC'))->format('U');
return date("Y-m-d H:i:s", $d);
Ecco un modo dritto per convertire l'ora UTC del questionario a TIM locale e. Questo è per un tempo memorizzato in un database ecc., Ad esempio qualsiasi ora. Devi solo trovare la differenza di fuso orario tra l'ora UTC e l'ora locale a cui sei interessato e quindi regolare l'ora UTC aggiunta aggiungendo la differenza.
$df = "G:i:s"; // Use a simple time format to find the difference
$ts1 = strtotime(date($df)); // Timestamp of current local time
$ts2 = strtotime(gmdate($df)); // Timestamp of current UTC time
$ts3 = $ts1-$ts2; // Their difference
È quindi possibile aggiungere questa differenza all'ora UTC memorizzata. (al mio posto, di Atene, la differenza è esattamente 05:00:00)
Dato un fuso orario locale, come ad esempio 'America/Denver', è possibile utilizzare la classe DateTime per convertire UTC timestamp per la data locale:
$timestamp = *********;
$date = new DateTime("@" . $timestamp);
$date->setTimezone(new DateTimeZone('America/Denver'));
echo $date->format('Y-m-d H:i:s');
Ma come faccio ad avere il timestamp UTC corrente? – Mark
Perché è necessario il timestamp UTC corrente per convertire il timestamp UTC salvato? – Amber
Ma se lo fai, 'time()' restituisce sempre UTC: http://us2.php.net/manual/en/function.time.php – Amber