Efter at være blevet spurgt to gange, i løbet af weekenden, om hvordan man sammenligner datoer i PHP, tænkte jeg det var tid til et lille blogindlæg.
Sammenligning af Datoer er faktisk utroligt nemt når man lige ved hvordan 😀
Med PHPs funktion php:strtotime er det muligt at konverterer stort set hvilken som helst dato information til Unix timestamp. Hurtigt forklaret angiver et Unix timestamp en given dato i form af antal sekunder siden 1. januar 1970. Dette betyder at en sammenligning af to datoer angivet i Unix timestamp er så simpelt som noget kunne være.
Lad os antage at vi har en dato angivet i YYYY-MM-DD (fx fra et mysql date felt)
og vi ønsker at se om denne dato er større end den nuværende dato. Først og fremmest skal vi bruge dags dato. Dette er nemt at hente ud med php:date hvorefter både sammenlignings dato og dagsdato skal konverteres vha php:strtotime som i eksemplet herunder:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php $dato = "2007-10-01"; //dato vi skal tjekke $idag = date("Y-m-d"); //dags dato $idag_timestamp= strtotime($idag); //konverter til timestamp $dato_timestamp = strtotime($dato); //konverter datoen til timestamp if ($dato_timestamp > $idag_timestamp) { echo 'Datoen er større end i dag'; } else { echo 'Datoen er mindre end i dag'; } ?> |
Ovenstående er ret simpelt, men mulighederne i php:strtotime er uanede. I PHPs dokumentation ses fx følgende:
|
1 2 3 4 5 6 7 8 9 |
<?php echo strtotime("now"), "n"; echo strtotime("10 September 2000"), "n"; echo strtotime("+1 day"), "n"; echo strtotime("+1 week"), "n"; echo strtotime("+1 week 2 days 4 hours 2 seconds"), "n"; echo strtotime("next Thursday"), "n"; echo strtotime("last Monday"), "n"; ?> |
Som alle er gyldige inputs i php:strtotime, og som alle returnerer gyldige timestamps for de pågældende datoer





Det er værd at huske, jeg troede man skulle til at lave noget split på – og så sammeligne hver enkelt
Det var netop også en af de løsninger som fik mig til at skrive lidt om det – det er en meget langsomlig vej at gå, for ikke at sige nærmest umulig