(PHP) den nemá 86 400 sekund?

MyEgo.cz

home foto blogy mywindows.cz kontakt

(PHP) den nemá 86 400 sekund?

PHP 24.10.11

Víte kolik má den sekund? Občas jsem viděl v PHP toto počítat jako 24 (hodin) * 60 (minut) * 60 (sekund). Nefunguje to.

setlocale(LC_ALL, "czech");
date_default_timezone_set("Europe/Paris");

function p($t) {
	$d = getdate( $t );
	echo $d['mday'],' ';
}

$o = 24*60*60; // 86 400
$t = mktime(0,0,0,10,29,2011);

p($t);
for ($i = 1; $i<=4; $i++) {
	$t += $o;
	p($t);
}

Vypíše:

29 30 30 31 1 

Komentáře

  1. 1 Jakub Bouček 24.10.11, 11:10:41
    FB

    Jistě, při posunu času (letní/zimní) je den o 1 hodinu kratší (delší).

  2. 2 Radek Hulán 24.10.11, 11:10:43
    FB

    [1] ano, zimní čas. Aneb (každý) den nemá 86 400 sekund.

  3. 3 Petr Kalivoda 24.10.11, 02:10:20
    FB

    Tak přesně na toto jsem narazil když jsem loni koncem října programoval rezervační kalendář.

  4. 4 Lukáš Hladík 24.10.11, 02:10:52
    FB

    Tak zrovna tenhle případ jednoduše vyřeší místo mktime použití gmmktime

  5. 5 Radek Hulán 24.10.11, 04:10:47
    FB

    [4] samozřejmě, počítat mktime s offsetem +1 den je správný postup, počítat +86 400 sekund není.

  6. 6 Vojtech Machacek 24.10.11, 06:10:59
    FB

    Jeden z důvodů proč mám raději ASP.NET než PHP

  7. 7 Radek Hulán 24.10.11, 07:10:08
    FB

    [6] PHP se zde chová dobře, právěže pracuje správně s letním / zimním časem

  8. 8 Jan Smetana 24.10.11, 11:10:38
    FB

    A kam patří vteřina na rozhraní dne? ;)

    Kam patří hranice, při rozdělení pizzy na třetiny?
    1/3 + 1/3 + 1/3 = 1
    0.333.. + 0.333.. + 0.333.. = 0.999..
    Což je o 0.00...01 méně.

    Zkusil bych počítat třeba od poledne.

  9. 9 Artur Filipiak 25.10.11, 01:10:44
    FB

    Problém je, že den opravdu nemá 86400 sekund, a konkrétně některé minuty mohou mít 61 sekund (měla by to být "common knowledge" a je to skoro ve všech dokumentacích funkci pracujících s čase - popsáno jako "leap seconds"). Zádrhelem je, že čas v sekundách od roku 1980 má leap seconds řešeny tak, že ty vteřiny trvají 2x déle, zatímco ostatní časové údaje mají o jednu vteřinu navíc (oněch 61 vteřin v minutě).

    Pokud někdo potřebuje přičíst jeden den/měsíc/cokoliv, pak doporučuji tento PŘEHLEDNÝ postup, u kterého snad není pochyb, co znamenají a jak fungují tyto 2 zápisy s rozdílným výsledkem:
    date('Y-m-d', strtotime("2010-02-25 +1 month"));
    date('Y-m-d', strtotime("2010-02-25 +31 days"));

  10. 10 kt 26.10.11, 01:10:25
    FB

    [8] Takove technicke doplneni. Neni to o 0.00...01 mene. 0.999...=1.0.

  11. 11 Vojtěch Semecký 12.12.11, 02:12:19
    FB

    [6] V ASP.NET má snad každý den 86 400 sekund? Tohle přece nijak nesouvisí s konkrétním programovacím jazykem.