timezone timezone - Come convertire tra fusi orari in PHP usando la classe DateTime?




list ini (4)

Sto cercando di convertire il tempo tra l'ora corrente in UTC e UTC al fuso orario corrente.

Ecco cosa ho fatto:

$schedule_date = new DateTime($triggerOn, new DateTimeZone('UTC') );
$triggerOn =  $schedule_date->format('Y-m-d H:i:s');

echo $triggerOn;

Il valore di output non cambia l'unica cosa che cambia nel formato.

la stringa $triggerOn stata generata in base al fuso orario America/Los_Angeles

Ecco come appare la mia stringa prima e dopo:

BEFORE    04/01/2013 03:08 PM
AFTER     2013-04-01 15:08:00

Quindi il problema qui è che DateTime non converte in UTC.


Answers

Si sta consumando la data / ora e si imposta correttamente il fuso orario, tuttavia prima di formattare il datetime, non si imposta il fuso orario dell'output desiderato. Ecco un esempio che accetta un fuso orario UTC e converte la data / ora nel fuso orario America / Los_Angeles:

<?php
$original_datetime = '04/01/2013 03:08 PM';
$original_timezone = new DateTimeZone('UTC');

// Instantiate the DateTime object, setting it's date, time and time zone.
$datetime = new DateTime($original_datetime, $original_timezone);

// Set the DateTime object's time zone to convert the time appropriately.
$target_timezone = new DateTimeZone('America/Los_Angeles');
$datetime->setTimeZone($target_timezone);

// Outputs a date/time string based on the time zone you've set on the object.
$triggerOn = $datetime->format('Y-m-d H:i:s');

// Print the date/time string.
print $triggerOn; // 2013-04-01 08:08:00

Crea la data utilizzando il fuso orario locale, quindi chiama DateTime::setTimeZone() per cambiarlo.


Quello che stai cercando è questo:

$triggerOn = '04/01/2013 03:08 PM';
$user_tz = 'America/Los_Angeles';

echo $triggerOn; // echoes 04/01/2013 03:08 PM

$schedule_date = new DateTime($triggerOn, new DateTimeZone($user_tz) );
$schedule_date->setTimeZone(new DateTimeZone('UTC'));
$triggerOn =  $schedule_date->format('Y-m-d H:i:s');

echo $triggerOn; // echoes 2013-04-01 22:08:00

arrow offre molte funzioni utili per date e orari. Questo bit di codice fornisce una risposta alla domanda e mostra che la freccia è anche in grado di formattare facilmente le date e visualizzare le informazioni per altre impostazioni locali.

>>> import arrow
>>> dateStrings = [ 'Jun 1  2005 1:33PM', 'Aug 28 1999 12:00AM' ]
>>> for dateString in dateStrings:
...     dateString
...     arrow.get(dateString.replace('  ',' '), 'MMM D YYYY H:mmA').datetime
...     arrow.get(dateString.replace('  ',' '), 'MMM D YYYY H:mmA').format('ddd, Do MMM YYYY HH:mm')
...     arrow.get(dateString.replace('  ',' '), 'MMM D YYYY H:mmA').humanize(locale='de')
...
'Jun 1  2005 1:33PM'
datetime.datetime(2005, 6, 1, 13, 33, tzinfo=tzutc())
'Wed, 1st Jun 2005 13:33'
'vor 11 Jahren'
'Aug 28 1999 12:00AM'
datetime.datetime(1999, 8, 28, 0, 0, tzinfo=tzutc())
'Sat, 28th Aug 1999 00:00'
'vor 17 Jahren'

Vedi http://arrow.readthedocs.io/en/latest/ per ulteriori informazioni.





php datetime timezone