Autor Zpráva
liborse
Profil
Dobrý den,

řeším jeden problém. Hodiny jsem hledal na Google, ale buď hledám špatně, či přesně nikdo můj problém neřešil. Řekl bych, že za A je správně, proto omluvte případně můj hloupý dotaz.

Situace je taková, že od uživatel do formuláře vyplní datum a čas (ve formátu 08.05.2014 a čas jako 08:05), o správný formát se mi starají skripty a kontroluji to, nicméně v tom problém není. V odesílacím skriptu (je v PHP) tyto 2 hodnoty spojím a pomocí strtotime() vytvořím timestamp, který pak uložím do databáze. Dělám to tak kvůli snadnému řazení akcí v pozdějším výpisu (aby se řadilo nejen podle data, ale i podle hodin a nemuselo se řadit 2x, pokud by byly 2 časy v jeden den). Prostě s timestampem se mi pracuje dobře. A zde je právě možný problém.

Co se stane, když dnes uživatel zadá dejme tomu datum 28.12.2013 v 8:00 a někdo si tento záznam prohlédne v zimním čase (když při zadávání byl letní čas)? Posune se čas o hodinu a nebo bude výpis správně. Jde mi o to, aby se při přechodu na zimní čas a obráceně, záznamy samovolně "neměnily" podle nastavení aktuální časové zóny. Možná je to triviální dotaz, ale nerad bych, aby někdo na akci dorazil o hodinu dříve či později, jestli mi rozumíte.

Děkuji za odpověď. Dodám, že pracuji s PHP 5.3+, MySQL 5+, Apache, ( HTML, CSS, jQuery apod.)..

EDIT: Ještě dodám, že datum z databáze vypisuji takto:
StrFTime("%d.%m.%Y - %H:%M", $hodnota_timestampu_v_databazi)
EDIT2: Na serveru je časová zóna Europe/Prague
peta
Profil
Pro sql prikazy:
http://dev.mysql.com/doc/refman/4.1/en//time-zone-support.html
SET time_zone = timezone;

Pro php prikazy:
http://www.php.net/manual/en/function.date-default-timezone-set.php
http://php.net/manual/en/timezones.php
date_default_timezone_set()

Nastavis si time zonu, podle ktere maji php nebo sql prikazy datum prepocitat a date / datetime ti cas spravne prepocita podle aktualniho casu serveru do casoveho razitka.

Ted ses rozhodl ukladat cas. Mas nastaveny timezone +1 hodina. Podle serveroveho casu je datum, kdy se pro timezone +1 hodina nepripocitava nic. A tak ti cas prevede do casoveho razitka s (bez pripocitavani nebo odpocitanim 1 hodiny, ted nevim, ale proste spravne).
Kdyz si toto razitko das zobrazit v case, kdy se hodina pripocitava, tak to je mu suma fuk, protoze on urcuje pripocitavani hodiny podle ulozeneho razitka a ne casu na serveru.
liborse
Profil
To jsem potřeboval vědět. Díky!
aDAm
Profil
Jen taková drobná vsuvka. Proč to do DB neukládaš v datovém typu pro to určeném? Tedy DATETIME?
Kajman
Profil
aDAm:
Proč to do DB neukládaš v datovém typu pro to určeném? Tedy DATETIME?

Však problém zmiňuje, mysql neukládá u datetime časové pásmo a špatně tedy řadí podzimní posun o hodinu zpět, kdy může mít později vložený záznam v datetime starší čas.

aby se řadilo nejen podle data, ale i podle hodin a nemuselo se řadit 2x, pokud by byly 2 časy v jeden den
aDAm
Profil
A tu unix time stampu to časové pásmo je? Měl jsem zato že unix time prostě jede v sekundách od svého počátku a to jaké datum/čas ti zobrazí při převodu nějakou časovou funkcí je dáno nastavením časového pásma serveru ne? Takže stejně by měl fungovat DB server.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0