Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]mktime
endrju15575
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 3.09.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
YaQzi
post
Post #2





Grupa: Zarejestrowani
Postów: 94
Pomógł: 31
Dołączył: 12.10.2008
Skąd: WAT

Ostrzeżenie: (0%)
-----


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

Ten post edytował YaQzi 10.03.2009, 17:57:11


--------------------
 Wszystkie wielkości świata nie są tyle warte, co dobra przyjaźń...
Go to the top of the page
+Quote Post
KCG
post
Post #3





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

Ostrzeżenie: (0%)
-----


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


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post
endrju15575
post
Post #4





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 3.09.2008

Ostrzeżenie: (0%)
-----


Hmmm... Wiec najwyrazniej zalezy to od ustawien na serwerze :/
Go to the top of the page
+Quote Post
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post
endrju15575
post
Post #6





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 3.09.2008

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
KCG
post
Post #7





Grupa: Zarejestrowani
Postów: 449
Pomógł: 4
Dołączył: 1.12.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
9242594 - zaczynasz? jak mogę, to pomogę :D /podstawowa znajomość php :P /
"to pomoc zawsze będzie gestem pięknym, zaliczana do tych teraz rzadko spotykanych..."
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 15:37