Programmera i PHP/Datum och tid i PHP

Från Wikibooks
Hoppa till navigering Hoppa till sök


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[redigera]

Det 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[redigera]

Anta 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.";
 }
?>