Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]mktime
Forum PHP.pl > Forum > Przedszkole
endrju15575
O funkcji mktime mozemy wyczytac:
"int mktime ( int godzina, int minuta, int sekunda, int miesiąc, int dzień, int rok [, int letni/zimowy] )
Funkcja zwraca uniksowy znacznik czasu odpowiadający podanym argumentom. Znacznik czasu jest liczbą całkowitą długą (long integer) zawierającą liczbę sekund dzielącą uniksową Epokę (1 stycznia 1970) od podanego w argumentach czasu."
Zastanawia mnie w zwiazku z tym, dlaczego

Kod
$x=mktime(0, 0, 0, 1, 1, 1970);
echo $x;

wyswietla wartosc -3600, a nie 0. Co prawda
Kod
echo date("Y-m-d H:i:s", $x);

wyswietli prawdlowa date 1970-01-01 00:00:00, ale i tak nie daje mi to spokoju smile.gif

Podejrzwam, ze cos zle zrozumialem i dlatego mam problem ze zrozumieniem dlaczego
Kod
$x=mktime(0, 0, 0, 1, 1, 1970);
echo date("Y-m-d H:i:s", ($x+$x));

daje wynik 1969-12-31 23:00:00

Prosze o pomoc w zrozumieniu tego (z pewnoscia) banalu.
YaQzi
Cytat(endrju15575 @ 10.03.2009, 13:57:45 ) *
Kod
$x=mktime(0, 0, 0, 1, 1, 1970);<BR>echo $x;

wyswietla wartosc -3600, a nie 0. Co prawda
Kod
echo date("Y-m-d H:i:s", $x);

wyswietli prawdlowa date 1970-01-01 00:00:00, ale i tak nie daje mi to spokoju smile.gif


Oficjalnego zdania nie zajmę ale swoje wyrazić mogę. smile.gif
Pierwszy parametr (godzina) dotyczy godziny, która aktualnie trwa a nie godziny już zakończonej
a więc:
Kod
$x=mktime(1, 0, 0, 1, 1, 1970);
echo $x;

wyświetli zero, ponieważ jest to zerowa sekunda i zerowa minuta pierwszej godziny Unixa,

natomiast:
Kod
$x=mktime(0, 0, 0, 1, 1, 1970);
echo $x;

to godzina zerowa, a więc przed rozpoczęciem epoki.

np. analogiczny zapis godziny 23:02, czyli drugiej minuty godziny 24:00 (0:00) miałby postać 0, 2, 0

tak ja to rozumiem... smile.gif
KCG
A mi to:
  1. <?php
  2. echo date("d.m.Y H:i:s",mktime(0,0,0,1,1,1970));
  3. ?>

wyświetla 01.01.1970 00:00:00 biggrin.gif
endrju15575
Hmmm... Wiec najwyrazniej zalezy to od ustawien na serwerze :/
phpion
Cytat(endrju15575 @ 10.03.2009, 22:13:11 ) *
Hmmm... Wiec najwyrazniej zalezy to od ustawien na serwerze :/

Nie, po prostu KCG w całej swej genialności robi wielkie halo z tego, że otrzymuje inną formę zapisu daty z powodu podania innego formatu wyprowadzanych danych. Sama data przecież jest taka sama.
endrju15575
Rzeczywiscie. Zle spojrzalem. Przeciez i u mnie taka sama date wyswietla:
Cytat(endrju15575 @ 10.03.2009, 13:57:45 ) *
[...] Co prawda
Kod
echo date("Y-m-d H:i:s", $x);

wyswietli prawdlowa date 1970-01-01 00:00:00


KCG zrobil to samo, tylko inaczej. Tylko nie zauwazyl, ze problem nie jest w wyswietleniu daty, tylko znacznika czasu i wyjasnienie jak sie ma on do przytoczonej definicji.
Sam juz sie pogubilem, pewnie przez te godziny sleczenia nad ta zagadka.

PS. Kawalek kodu, z ktorym meczylem sie od rana i dzieki ktoremu zaczalem zaglebiac sie w temat funkcji mktime, jest juz skonczony. W skrocie polegalo to na operacjach na czasie. Wszelkie operacje robie na znacznikach powiekszonych o godzine, zgodnie z tym co napisal YaQzi. Na samym koncu, przy wyswietlaniu wyniku odejmuje ta nadmiarowa godzine
Kod
echo date("H:i:s", ($wynik-3600));
i o dziwo otrzymuje poprawne wyniki smile.gif
KCG
Cytat(phpion @ 10.03.2009, 20:46:51 ) *
KCG w całej swej genialności robi wielkie halo

Wypraszam sobie.
Doczytałem, uważam, że Twój pogląd jest logiczny, YaQzi.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.