Mam trudności z używaniem PHP DateTime
do konwersji daty odebranej ze strefy czasowej GMT-8 (PST) do formatu czytelnego dla człowieka z strefa czasowa GMT -7 (PDT).Używanie PHP DateTime do parsowania i konwersji strefy czasowej PST na PDT (GMT -8 na GMT -7)
Oto przykład:
$tz = new DateTimeZone('America/Los_Angeles');
$saleEndDate = new DateTime("2016-11-07T17:30:00-08:00");
$saleEndDate->setTimezone($tz);
echo $saleEndDate->format('Y-m-d H:i:s');
Wyjście powyższego kodu jest: 07.11.2016 17:30:00. Jednak powinien on wyświetlać 2016-11-07 18:30:00, ponieważ America/Los_Angeles
jest teraz w świetle dziennym (GMT -7, PDT).
Z tego co czytałem w DateTime docs, komenda new DateTime
powinien być w stanie zinterpretować, że ciąg 2016-11-07T17:30:00-08:00
ma GMT -8 Strefa czasowa:
The czasowej parametru i aktualnej strefy czasowej są ignorowane gdy parametr czas zawiera znacznik czasu UNIX (np. 946684800) lub określa strefę czasową (np. 2010-01-28T15: 00: 00 + 02: 00).
Mimo to nie sądzę DateTime
rozpoznaje GMT -8 poprawnie.
Czy ktoś wie, jakie podejście jest konieczne, aby poprawnie przekonwertować między strefami czasowymi?
Aktualizacja:
Ja również próbowałem przechodzącą w DateTimeZone
jako drugi parametr do konstruktora DateTime
, ale również bez skutku:
$tz = new DateTimeZone('America/Los_Angeles');
$saleEndDate = new DateTime("2016-11-07T17:30:00-08:00", new DateTimeZone("America/Los_Angeles"));
$saleEndDate->setTimezone($tz);
echo $saleEndDate->format('Y-m-d H:i:s');
także nie działa:
$tz = new DateTimeZone('America/Los_Angeles');
$saleEndDate = new DateTime("2016-11-07T17:30:00", new DateTimeZone("PST"));
$saleEndDate->setTimezone($tz);
echo $saleEndDate->format('Y-m-d H:i:s');
Również nie działa:
$tz = new DateTimeZone("PDT");
$saleEndDate = new DateTime("2016-11-07T17:30:00", new DateTimeZone("PST"));
$saleEndDate->setTimezone($tz);
echo $saleEndDate->format('Y-m-d H:i:s');
Nie spadłem, wznowiłem ... ale może nie rozumiem tutaj czegoś ... dlaczego myślisz, że powinien on zostać zamieniony na 18:30 tylko dlatego, że teraz oszczędzasz na świetle dziennym? -8 to w zasadzie Los Angeles, więc może nie ma co tu konwertować. –
http://stackoverflow.com/questions/17694894/different-timezone-types-on-datetime-object "Tylko obiekty DateTime z dołączonymi strefami czasowymi typu 3 będą poprawnie zezwalać na czas letni." Twoja '$ saleEndDate' jest tworzona jako typ 1. – ceejayoz
@PawelDubiel powinien się przekonwertować, ponieważ podany czas to' -8', ale zestaw stref czasowych to '-7' – zerkms