Mitä eroa on funktioilla gmmktime() ja mktime() ? Palauttavat 5h erilaiset ajat.
Testi ohjelmani:
<?php $d = 1; // Päivä $m = 7; // Kuukausi $y = 2014; // Vuosi // säästetään näppäimiä, kuten aina $br = "<br>\n"; // 5h eroa (18 000sec) $test_day1 = gmmktime( 0, 0, 0, $m, $d, $y); // 1404172800 -> 27, 30.06.2014 19:06 $test_day2 = mktime( 0, 0, 0, $m, $d, $y); // 1404190800 -> 27, 01.07.2014 00:07 $testtoday = time(); // Nykyhetki // TESTING echo "TEST 1 : (". $test_day1 .") ". date('W, d.m.Y H:m', $test_day1) .$br; echo "TEST 2 : (". $test_day2 .") ". date('W, d.m.Y H:m', $test_day2) .$br; echo "TODAY : (". $testtoday .") ". date('W, d.m.Y H:m', $testtoday) .$br; ?>
Kopioin netistä satunnaisesti jonkun löytämäni ohjelman pätkän projektia vaarten. Vähän niinkun malliksi. Ja tässä oli käytetty tuota gmmktime() -funktiota, eikä ohjelma toiminut aivan odotetusti. Testasin ohjelmaa tuolla mktime() -funktiolla ja vika korjaantui.
Lähdin vielä ihmettelemään testi ohjelman muodossa tätä.
Kuten dokumentaatiossa aika selvästi lukee, mktime olettaa, että antamasi luvut palvelimen ovat paikallista aikaa, kun taas gmmktime olettaa, että ne ovat GMT-aikaa. Voisit debuggaukseesi lisätä aikavyöhykkeen tulostuksen, niin näkisit, mitä ne ajat oikein ovat. Funktiossa mktime käytettävän aikavyöhykkeen voi asettaa funktiolla date_default_timezone_set.
http://www.lmgtfy.com/?q=php mktime vs gmmktime
Myös PHP:n dokumentaatio voi auttaa.
Mutta koska tämä on foorumi, on mielestäni typerää ohjata kysyjä ulos sivustolta, joten
mktime ottaa huomioon paikallisen koneen aikavyöhykkeen. gmmktime ei. mktime suhteuttaa ajan paikalliseen aikaan, gmmktime suhteuttaa GMT-aikaan.
https://www.php.net/manual/en/function.gmmktime.
https://www.php.net/manual/en/function.mktime.
Lisäys: Oho, meatballs ehti ensin.
Nämä aikajutut ovat kyllä itsestänikin aika ärsyttäviä. joskus pääsee helpolla, mutta onhan niitä kun pitää muotoilla aikaleimoja, säätää aikavyöhykkeitä, kesäaikoja, hakea x tuntia vanhoja asiota yms. Pitäisi varmaan perehtyä tarkemmin joskus
Totta kai ne ovat ärsyttäviä, koska php:ssä ei ole vakiona minkäänlaisia järkeviä työkaluja aikojen käpistelyyn.
The Alchemist kirjoitti:
Totta kai ne ovat ärsyttäviä, koska php:ssä ei ole vakiona minkäänlaisia järkeviä työkaluja aikojen käpistelyyn.
Eikö? Onko DateTime luokkakin täysin hyödytön? Minkälaisia puutteita siinä on?
En minäkään heti keksi miksei DateTime (tai DateTimeImmutable) kelpaisi.
Kyseessä kuitenkin melkoisen hyvä MacGyver aikojen käsittelyyn.
Aivan juu, eipä käynyt tällänen pikku seikka mielessä, tuo funkitoiden palauttama ero siis muuttuu aikavyöhykkeen muuttuessa.. Myös date_default_timezone_set -funktiosta on apua muuallakin kuin tässä :D
Metabolix kirjoitti:
Voisit debuggaukseesi lisätä aikavyöhykkeen tulostuksen, niin näkisit, mitä ne ajat oikein ovat.
Tuossa koodissahan se palauttaisi molemmille ajoille vain "-05:00", date() -funktio uskoakseni olettaa että annettu aika on default tz.
Elikkäs johtopäätelmä on, että mun tarvii käyttää gmmktime() funktion palauttamaan aikaleimaan gmdate() functiota, niin toimii kuten pitääkin.
Ja date() -funktio voisi toimia paremmin muodossa (Näytetään tuntien jälkeen kuitenkin ne minuutit):
date('W, d.m.Y H:i', $test_day2)
Kiitti vastauksista :)
Pentu kirjoitti:
Metabolix kirjoitti:
Voisit debuggaukseesi lisätä aikavyöhykkeen tulostuksen, niin näkisit, mitä ne ajat oikein ovat.
Tuossa koodissahan se palauttaisi molemmille ajoille vain "-05:00",
Totta, mutta ovelasti siitä voisi arvata sen jo todetun asian, että saamasi viiden tunnin aikaero johtuu aikavyöhykkeestä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.