Výpis času podle časového pásma

Školení, která pořádám

Jedna z výhod malého českého prostředí je v tom, že se rozkládá pouze v jednom časovém pásmu. Na webhostingu tedy může být časové pásmo nastaveno na CET, ve skriptech se nemusíme o nic starat a všem lidem se čas bude zobrazovat správně. Pokud se na stránku náhodou podívá někdo ze vzdáleného zahraničí, tak zobrazovaný čas pochopí jako místní čas serveru a na svůj čas si ho dokáže převést.

Problém ale nastává u serverů, kde není na první pohled patrné, do jakého časového pásma patří. Když je na anglicky psaném serveru uvedeno, že článek vyšel ve 14:00, můžeme o převodu na náš čas jen spekulovat. Na někoho může působit divně i to, že když příspěvek do diskuse vložil v 18:00, tak se u něj zobrazuje, že ho vložil ve 14:00. Pokud tedy z kontextu serveru není patrné, v jakém leží časovém pásmu, je slušné to někam uvést (pro zdůraznění světovosti za všechny časy nebo decentně někam do informací o serveru).

Ideální by bylo časové pásmo nastavovat podle přání klienta. Prohlížeče ale informaci o svém časovém pásmu bohužel neposílají a co hůř – ve standardu na to ani není vyhrazena žádná hlavička. Jedinou možností tak zůstává časové pásmo odhadnout z IP adresy nebo ho nechat uživatele zvolit.

Nastavení časového pásma skriptů od PHP 5.1 zajišťuje funkce date_default_timezone_set nebo konfigurační direktiva date.timezone, ve starších verzích k tomu slouží nastavení proměnné prostředí TZ funkcí putenv. MySQL časová pásma podporuje od verze 4.1. V nižších verzích je potřeba dát pozor na současné používání funkcí typu NOW spolu s přímým zadáním času. Hodit by se mohla funkce UNIX_TIMESTAMP, která vždy vrací počet vteřin od půlnoci 1.1.1970 GMT.

Přijďte si o tomto tématu popovídat na školení Návrh a používání MySQL databáze.

Jakub Vrána, Seznámení s oblastí, 13.2.2006, diskuse: 13 (nové: 0)

Diskuse

Michal:

Uz uz jsem te chtel zaprudit, ze se mi tu cas tveho blogu zobrazuje blbe a koukam ze vydani clanku mas jen jako datum... Mno dobraaaa ;-)

Michal:

Ha, nachytal jsem te! Jakypak 8:46:40? Vzdyt uz se stmiva... Mel bys ctenarum jit prikladem a casy uvadet "spravne" :-))

ikona Jakub Vrána OpenID:

Ty budeš asi z Nového Zélandu, viď? ;-)

Michal:

Pocitam ze i kdybych byl z Mongolska tak mi to tu ukazuje ten vas zcestnej "jedinej spravnej" cas...

Mordae:

On někdo používá něco jiného než /usr/share/zoneinfo/posix/GMT? Sakra... :]

Jana:

Dobrý den, můžete mi prosím někdo jednoduše vysvětlit nebo poradit jak si spočítám kdy vyšlo dne 15.4.2006 Slunce nad Havanou /v tamním čase/. Jediné co jsem zatím zjistila, že
podle GTM 5: 08, ale co s tímto údajem dál? Děkuji Jana

m.tes@email.cz

ikona spaze:

Na serveru bych spis nastavil Europe/Prague, nez CET (kvuli prechodu CET <-> CEST).

haXis:

je to trochu OT, ale chtel bych se zeptat na takovou vecicku:

kdym vezmu dnesni datum a datum 1.1.1984, jak z toho vypocitam vek? Tahle vecicka mi vrta hlavou dost dlouho.

:-)

bs:

Prevod na pocet sekund od "pocatku" v unixovem formatu, odecist a prevod zpet na normalni datum, ziskat vek na roky, mesice, dny..

ikona Jakub Vrána OpenID:

Kvůli přestupným rokům to není přesné. Např.
<?php
$age
= strtotime("2005-02-15") - strtotime("2003-02-15");
echo (
date("Y", $age) - 1970) . "r " . (date("n", $age) - 1) . "m " . (date("j", $age) - 1) . "d\n";
?>
řekne o den víc, naopak 2008-02-15 až 2005-02-15 zase o den míň.

ikona Jakub Vrána OpenID:

Ve dnech ti to v MySQL řekne funkce DATEDIFF().

Birkof:

Lepší než http://www.geobytes.com/GeoNetMap.htm je http://www.maxmind.com/app/country , dá sem tam zdarma v textové podobě stáhnout databáze IP adres pro jednotlivé státy, a výsledek může být třeba http://birkof.wz.cz/birkof/php/geoip/geoip.php Pak to stačí jen doplnit o časová pásma. Stránka ještě není dodělaná a jsou v ní chyby, tak prosím buďte schovívaví.

Jindřich Švec:

Prosím o radu.Chci dražit jednu položku a u ní je uveden konec aukce v Pacifickém čase PDT.Já potřebuji převést tento čas na středoevropský MESZ.Přes internet jsem si odvodil,že to zjistím tak,když k PDT připočítám 9 hodin,jistý si ale nejsou a nerad bych konec aukce zmeškal.Můžete mi někdo poradit?Děkuji.  jindrich.svec@email.cz

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.