Diskuze: Class DateTime a unixt čas Europe/Prague

PHP PHP Class DateTime a unixt čas Europe/Prague American English version English version

Avatar
Pavel
Redaktor
Avatar
Pavel:

Ahoj,

při převodu staršího uložení v DB ve formátu UNIXTime na nový DateTime jsem zjistil jistou nesrovnalost s převodem do nového formátu, tak bych se o něj s vámi podělil.

Při vytváření instance data pomocí new DateTime() se vždy vychází z časové zóny UTC ('Europe/London'), i když při vytváření instance použijete DateTimeZone("E­urope/Prague").

$datum = new DateTime("@$datumUnix", new DateTimeZone('Europe/Prague')); // nefunguje

Pokud budete chtít změnit časouvou zónu, musíte použít příkaz:

$datum = new DateTime("@$datumUnix");
$datum->setTimeZone(new DateTimeZone("Europe/Prague")); //spravne

Snad vám tato informace ušetři spoustu času než mě :-)4

Pavel

P.S. Možná by nebylo špatné se o tom zmínit v seriálu OOP v sekci DateTime, kde jsem to také hledal, ale tato informace tam není ( IT Network OOP - Datum a čas )

 
Odpovědět 30. června 22:05
Avatar
shaman
Člen
Avatar
Odpovídá na Pavel
shaman:

Nie je to celkom pravda ze to nefunguje. V dokumentacii php pre DateTime http://php.net/…onstruct.php je poznamka:

Note:
The $timezone parameter and the current timezone are ignored when the $time parameter either is a UNIX timestamp (e.g. @946684800) or specifies a timezone (e.g. 2010-01-28T15:00:00+02:00).

Co vlastne znamena ze timezone bude ignorovane ked time parameter obsahuje informaciu o timezone alebo sa jedna o UNIX timestamp. Unix timestamp sa pocita v UTC. V tvojom pripade si prevadzal UNIX timestamp, ktory uz obsahuje informaciu o timezone a teda sa spravne ignoroval tvoj timezone paramater.

Nakoniec si to ale vyriesil spravne. :)

Nahoru Odpovědět 1. července 13:56
try {...} catch (Exception ignored) { echo " ¯\_(ツ)_/¯ "; }
Avatar
Pavel
Redaktor
Avatar
Odpovídá na shaman
Pavel:

Ahoj,

no.. když ho ignoruje, to znamená, že tím pádem si nemůžeš nastavit při vytváření jinou časovou zónu než je UTC ('Europe/London'), což jsem napsal.

A pokud chce člověk jinou časovou zónu, napsal jsem postup. Nevidím nesrovnalost, ale potvrzení z dokumentace ;-)

Ale díky za upřesnění ...

Pavel

 
Nahoru Odpovědět 1. července 15:27
Avatar
mkub
Redaktor
Avatar
mkub:

ohladne Unix timestamp si vedla, pocita sa od zaciatku Unix ery a je to pocet ubehnutych sekund od 1. 1. 1970 UTC

 
Nahoru Odpovědět  +1 1. července 16:18
Avatar
shaman
Člen
Avatar
Odpovídá na Pavel
shaman:

Ako mkub spomenul, UNIX timestamp su sekundy od zaciatku roku 1970 a to v UTC timezone. Tym padom UNIX timestamp uz ma nastavenu timezonu (UTC) a preto pri vytvarani objektu DateTime sa neprihliada na druhy argument, pretoze ten prvy argument uz obsahuje informaciu o timestampe.Takze ty ked nastavujes v druhom riadku timezonu, tak ten cas nemenis, len ho prepocitas z UTC do ineho (v tvojom pripade "Europe/Prague")

Nahoru Odpovědět 1. července 17:15
try {...} catch (Exception ignored) { echo " ¯\_(ツ)_/¯ "; }
Avatar
Pavel
Redaktor
Avatar
Pavel:

pane Bože,

vím co je UNIXTime čas :-@ ...

Já tu chcel jen napsat, že nelze nastavit při vytváření času v tomto formatu DateTimeZone přímo jako u ostatních a aby si na to ostatní dali pozor, jelikož mě to vypeklo a dlouho mě to trvalo, než sem přišel na to proč. Ne tu diskutovat o nesmyslech..

Pavel

 
Nahoru Odpovědět 1. července 19:23
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.