Avatar
Pavel
Redaktor
Avatar
Pavel:

Ahoj,
nedávno jsem řešil problém s převodem staršího formátu UNIX timestamp a zjistil jsem zajímavou anomálii Jde o měsíc Březen roku 2015:

$casOD=1425164400;
$casDO=1427839199;
echo strftime("%e.%m.%y - %H:%M:%S", $casOD);  //vypíše 1.03.15 - 00:00:00 - v pořádku
echo strftime("%e.%m.%y - %H:%M:%S", $casDO);   //vypíše  31.03.15 - 23:59:59  - v pořádku
echo ($casDO-$casOD);   //je 2674799 , což je 30dní a POUZE 22:59:59 hodin - chyba o 1 hodinu

Jde pouze o březen. Nevíte proč se to děje?

Pavel

 
Odpovědět 27.9.2015 10:53
Avatar
mayo505
Redaktor
Avatar
Odpovídá na Pavel
mayo505:

možno je to kvôli prevodu na letný čas, kde sa posunie čas o jednu hodinu dopredu a teda má ten mesiac o hodinu menej. Ale neviem ako toto berú PHP funkcie do úvahy. Skús to aj s októbrom a budeš mať istotu

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 27.9.2015 11:15
Avatar
shaman
Člen
Avatar
Odpovídá na Pavel
shaman:

Ano cas sa presuva 29 marca 2015 ale to nema vplyv na unix timestamp. Timestamp sa pocita ako sekundy od 1.1.1970 takze sa ti nemoze stratit hodina.
Ja som si spustil tvoj program a mne to ukazuje ine hodnoty a dokonca aj ten casovy rozdiel je ok.

<?php
$casOD=1425164400;
$casDO=1427839199;
echo strftime("%e.%m.%y - %H:%M:%S %Z", $casOD)."<br/>";  //vypíše 1.03.15 - 00:00:00 - v pořádku
echo strftime("%e.%m.%y - %H:%M:%S %Z", $casDO)."<br/>";   //vypíše  31.03.15 - 23:59:59  - v pořádku
echo ($casDO-$casOD);

zobrazuje

28.02.15 - 23:00:00 UTC
31.03.15 - 21:59:59 UTC
2674799
Editováno 27.9.2015 22:52
Nahoru Odpovědět 27.9.2015 22:51
try {...} catch (Exception ignored) { echo " ¯\_(ツ)_/¯ "; }
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 4 zpráv z 4.