Programmera i PHP/Datum och tid i PHP
Det är förvånansvärt ofta man är tvungen att hantera både datum och tid på olika hemsidor. Det kan vara alltifrån att skriva loggar för speciella händelser till att föra in exakt tid när något skall ske. Vill man bara ha ut datumet skrivs det vanligtvis som ÅR - MÅNAD - DAG i Sverige. Julafton år 2015 blir alltså 2015-12-24, i alla fall om man använder följande exempel på php-kod som körs just den dagen:
<?php
print date("Y-m-d");
?>
Det går lika bra att använda enkla citattecken, slutresultatet blir detsamma. Vill du inte ha med bindestrecken kan du lika gärna skriva:
<?php
print date("Ymd");
?>
Då blir datumet utskrivet som 20151224 istället.
Varför är det här sättet bättre än andra att skriva datum på? Svaret ger sig själv om man tänker efter. I USA och andra delar av den engelsktalande världen skriver man dagen i mitten: ÅR - DAG - MÅNAD och i Sverige har det varit ganska vanligt med DAG/MÅNAD-ÅR. Bägge exemplen innebär att det är omöjligt att jämföra om ett datum är yngre eller äldre än ett annat. Skall man däremot jämföra om 20151224 kommer före eller efter lucia samma år är det bara att ta 20151224-20151213. Svaret blir -11 alltså kommer julaftonen elva dagar efter lucia. Skall man göra något liknande med de andra sätten att skriva datum är man tvungen att bryta upp datumet i beståndsdelar och jämföra bit för bit, vilket blir mycket besvärligare.
Vill du ha med både datum och tid kan du skriva:
$datum = date('Y-m-d H:i:s');
Datum i framtiden
redigeraDet finns en mängd olika rutiner inbyggda i PHP för att visa tid, men om man vill hitta ett datum i framtiden kan det bli litet besvärligare. Här följer ett extremt klumpigt sätt att räkna ut ett datum 30 dagar in i framtiden, men det viktigaste är att det fungerar och att det går att se vad som händer inuti koden:
<?php
$shortdate= date('Y-m-d');
$s_aor = substr($shortdate,0,4); //ta fram år
$s_maonad = substr($shortdate,5,2); //ta fram månad
$s_dag = substr($shortdate,8,2); //ta fram dag
if ($s_maonad == 12 && $s_dag > 1) { //om man är i december måste året ändras
$s_maonad = 01;
$s_aor = $s_aor+1;}
if ($s_dag > 28 && $s_maonad == 01) { //Om man är i januari hoppar man fram två månader
$s_maonad = 03;
if ($s_dag == 29) {
$s_dag = 01;}
if ($s_dag == 30) {
$s_dag = 02;}
if ($s_dag == 31) {
$s_dag = 03;}
//Om det är den 31:a och nästa månad bara har 30 dagar hoppar man fram 2 månader, undantaget december
if ($s_dag == 31 && ($s_maonad == 01 || $s_maonad == 03 || $s_maonad == 05|| $s_maonad == 07 || $s_maonad == 08 || $s_maonad == 10) {
$s_dag = 01;
$s_maonad = $s_maonad + 2;}
$date30ahead = $s_aor."-".$s_maonad."-".$s_dag;
echo "Datum 30 dagar in i framtiden är ". $date30ahead;
?>
Datumjämförelser
redigeraAnta att du sparat ett datum som:
$sparatdatum = 2012-01-20
Då kan man göra en extremt snabb jämförelse md dagens datum för att se vilket som är äldst.
<?php
$idag = date("Y-m-d");
$expire = $sparatdatum;
$today_time = strtotime($idag);
$expire_time = strtotime($expire);
if ($expire_time < $today_time){
echo "Det finns tid kvar.";
else
echo "Tiden har runnit ut.";
}
?>