Du er her: Hovedside > Artikler > PHP > Artikkel

Tid og dato i PHP

Skrevet av: GratisGuide.net

I denne artikkelen skal vi se nærmere på hvordan du formatterer tid og dato i PHP. Dette er ingen bruksanvisning for funksjonene, men gir deg litt informasjon om dem samt eksempler på hvordan du kan bruke de.

Det finnes flere funksjoner i PHP som behandler tid og dato. Nedenfor ser du alle funksjonene. Klikk lenkene for å hoppe til vår forklaring av funksjonene:

checkdate()
date()
getdate()
gettimeofday()
gmdate()
gmmktime()
gmstrftime()
localtime()
microtime()
mktime()
strftime()
strtotime()
time()

checkdate()

Denne funksjonen lar deg sjekke at en dato er gyldig i.h.t. den gregorianske kalenderen ("vår" kalender). Funksjonen tar tre heltallsverdier og returnerer sann eller usann etter hvorvidt datoen er gyldig eller ikke.

Funksjonen tar tre heltallsverdier:

checkdate(måned, dag, år)

Eksempler:

Eksempelet nedenfor skriver ut teksten "Gyldig dato" siden 2004 er skuddår:

if (checkdate('2', '29', '2004')) {
  echo "Gyldig dato";
} else {
  echo "Ugyldig dato";
}

Eksempelet nedenfor skriver ut teksten "Ugyldig dato" siden 1700 ikke er skuddår:

if (checkdate('2', '29', '1700')) {
  echo "Gyldig dato";
} else {
  echo "Ugyldig dato";
}

date()

Denne funksjonen lar deg formattere en dato etter et tidsstempel som angir hvor mange sekunder som er gått siden Unix Epoch (som er 1. januar 1970 kl. 00:00:00 GMT). Funksjonen tar en verdi og en valgfri verdi og returnerer en streng formattert som angitt.

Funksjonen tar en strengverdi og en valgfri heltallsverdi:

date(format [, tidsstempel])

Eksempler:

Eksempelet nedenfor skriver ut teksten "1970-01-01" (som er 1. januar 1970 i internasjonalt format):

echo date("Y-m-d", 0);

Eksempelet nedenfor skriver ut teksten "01.01.2004" (som er 1. januar 2004 i norsk format) siden 1072915200 er antall sekunder for 1. januar 2004 kl. 0.00 fra 1. januar 1970 kl. 0.00:

echo date("d.m.Y", 1072915200);

Eksempelet nedenfor skriver ut teksten "09.03.2003 kl. 13.00" (som er 9. mars 2003 kl. 13.00) forutsatt at tidsstempelet ved utskriftstidspunktet er 1047214800 da eksempelet benytter seg av det tidsstempelet som gjelder når funksjonen utføres):

echo date("d.m.Y kl. H.i");

Eksempelet nedenfor skriver ut teksten "I dag: 29.02.2004" (29. februar 2004) og "I morgen: 01.03.2004" (1. mars 2004) forutsatt at tidsstempelet ved utskriftstidspunktet er 1078059600 da eksempelet benytter seg av det tidsstempelet som gjelder når funksjonen utføres; 86400 er antall sekunder i ett døgn):

echo "I dag: ".date("d.m.Y")."<br>";
echo "I morgen: ".
date("d.m.Y", time()+86400);

getdate()

Med denne funksjonen kan du hente ut dato-informasjon som tekst. Funksjonen returnerer et assosiativt array som inneholder følgende informasjon relativt til det tidspunktet du har kalt funksjonen med (array-nøkkel angitt i parentes):

Sekunder, tall (seconds)
Minutter, tall (minutes)
Timer, tall (hours)
Månedsdag, tall (mday)
Ukedag, tall (wday), (0-6, søndag-lørdag)
Måned, navn (mon)
År, tall (year)
Årsdag (yday), 0-364(365) (0 = 1. januar)
Ukedag, navn (weekday)
Måned, navn (month)

Funksjonen tar en valgfri heltallsverdi, og returnerer et array med informasjonen som angitt over (navn i parentes):

getdate([tidsstempel])

Eksempler

Eksempelet nedenfor skriver ut teksten "Thursday 1 January 1970" fordi "0" er tidsstempelet som er angitt. Dag- og månedsnavn avhenger av systemspråket (se strftime() for hvordan du kan bruke norske dag- og månedsnavn):

$dato = getdate(0);
echo $dato["weekday"]." ".$dato["mday"]." ".$dato["month"]." ".$dato["year"];

Eksempelet nedenfor skriver ut teksten "I dag er den 68. dagen i 2003.", forutsatt at tidsstempelet ved utskriftstidspunktet er 1047214800 (9. mars 2003) da eksempelet benytter seg av det tidsstempelet som gjelder når funksjonen utføres:

$dato = getdate();
echo "I dag er den ".($dato["yday"]+1).". dagen i ".$dato["year"].".";

gettimeofday()

Denne funksjonen returnerer et assosiativt array som returnerer informasjon om gjeldende systemtidspunkt. Følgende informasjon kan hentes frem:

Sekunder (siden UNIX Epoch)
Mikrosekunder
Minutter vest for GMT
Type sommertid

La oss anta at serveren kjører norsk tid, og at systemtiden er 30. mars 2003 kl 00.59:

echo "Sekunder: ".gettimeofday("seconds")."<br>";
echo "Minutter vest for GMT: ".
gettimeofday("minuteswest")."<br>";
echo "Sommertid: ".
gettimeofday("dsttime");

Dette skrives da ut:

Sekunder: 1048985940
Minutter vest for GMT: -60
Sommertid: 0

Legg merke til at verdien «Minutter vest for GMT» er negativ. Dette er fordi norsk tid er øst for GMT.

La oss anta at systemtiden nå er 30. mars 2003 kl 03.59:

echo "Sekunder: ".gettimeofday("seconds")."<br>";
echo "Minutter vest for GMT: ".
gettimeofday("minuteswest")."<br>";
echo
gettimeofday("dsttime");

Dette skrives ut:

Sekunder: 1048993140
Minutter vest for GMT: -120
Sommertid: 3

Forskjellen mellom sekundverdiene er 7200 (= to timer) selv om det tilsynelatende er tre timer mellom tidspunktene (0.59 og 3.59). Dette fordi sommertid er innført (sommertid 0 i første eksempel angir normaltid (ingen sommertid), sommertid 3 angir vest-europeisk sommertid). Verdien for «Minutter vest for GMT» er også økt med 60 minutter (en time) på grunn av sommertid.

gmdate()

Funksjonen gmdate() gir deg informasjon om tiden på samme måte som funksjonen date() med det unntaket at gmdate() alltid vil gi "0" dersom tegnet "Z" bruker i formatstringen ("Z" angir tidsforskjellen i minutter i forhold til GMT).

Se date() for eksempler.

gmmktime()

Denne funksjonen fungerer på samme måte som mktime() med det unntaket at parametrene som angis forstås å være GMT. Funksjonen godtar parameteret is_dst, men det bør ikke brukes.

Se mktime() for eksempler.

gmstrftime()

Denne funksjonen fungerer på samme måte som strftime() med det unntaket at datoen/tidspunktet som returneres er GMT.

Se strftime() for eksempler.

localtime()

Funksjonen returnerer informasjon om dato og tidspunkt på to måter; som et vanlig array eller som et assosiativt array. Funksjonen tar to valgfrie verdi. Følgende informasjon returneres (nummer i vanlig array i første parentes, navn ved assosiativt array i andre parentes):

Sekunder (0) (tm_sec)
Minutter (1) (tm_min)
Timer (2) (tm_hour)
Månedsdag (3) (tm_mday)
Måned (4) (tm_mon), 0-11, januar-desember
År (5) (tm_year), siden 1900
Ukedag (6) (tm_wday), 0-6, søndag-lørdag
Årsdag (7) (tm_yday), 0-364(365)
Sommertid (8) (tm_isdst), boolensk; 0=nei, 1=ja

Funksjonen tar en valgfri heltallsverdi og en valgfri boolensk verdi og returnerer et array, evnt. et assosiativt array. Dersom tidsstempel ikke oppgis benyttes gjeldende tidsstempel på serveren:

localtime([tidsstempel [, returner_assosiativt_array] ])

Eksempler

$tid = localtime(0);
echo $tid["tm_year"];

Koden over returnerer ingenting, fordi localtime() er kalt opp uten den valgfri boolenske verdien for assosiativt array, og funksjonen returnerer derfor et vanlig array. Koden nedenfor fungerer som forventet:

$tid = localtime(0);
echo $tid[5];

Her vil det skrives ut "70" som er antall år for UNIX Epoch (tidsstempel 0) fra år 1900.

$tid = localtime(0, 1);
echo $tid["tm_year"];

Her vil det også skrives ut "70" fordi vi har angitt at returverdien skal være et assosiativt array (med "1" som den valgfrie boolenske verdien).

microtime()

Denne funksjonen returnerer gjeldende tidsstempel sammen med mikrosekunder (ned til 8 desimaler). Returverdien er en streng der mikrosekunder og tidsstempel er adskilt med mellomrom.

Eksempler:

Koden nedenfor skriver ut antall mikrosekunder:

list($msek, $sek) = explode(" ", microtime());
echo $msek;

Eksempelet nedenfor, som er hentet fra PHP's offisielle hjemmeside, skriver ut hvor lang tid det tar for PHP å gå gjennom en løkke:

function getmicrotime() {
  
list($usec, $sec) = explode(" ", microtime());
  return ((float)$usec + (float)$sec);
}

$tid_start =
getmicrotime();

for ($i=0; $i < 1000; $i++) {
  //Gjør ingenting 1000 ganger
}

$tid_slutt =
getmicrotime();

$tid = $tid_slutt - $tid_start;

echo "Gjorde ingenting på $tid sekunder.";

Dette kan skrive ut f.eks.:

Gjorde ingenting på 0.00043300132751465 sekunder.

mktime()

Med denne funksjonen kan du lage et tidsstempel. Funksjonen tar inntil sju verdier, og returnerer et langt heltall som tilsvarer tidsstempelet til verdiene som er oppgitt i forhold til UNIX Epoch (1. januar 1970 kl 0.00 GMT).

Funksjonen tar seks heltallsverdier og en boolensk verdi:

mktime(timer, minutter, sekunder, måned, dag, år, er_sommertid)

Du kan unnlate å oppgi verdier, fra høyre mot venstre. Verdier du ikke oppgir hentes i så tilfelle fra gjeldende systemtid. Verdien for år kan være to eller fire sifre: To sifre betyr: 00-69 = 2000-2069, 70-99 = 1970-1999. Firesifret år kan være fra 1902 til 2037.

Tidsstempler for datoer før UNIX Epoch er negative tidsstempler. Vær oppmerksom på at PHP forsøker å finne ut hvorvidt en dato angir sommertid eller ikke dersom den siste verdien er utelatt.

Eksempler:

Her er tre eksempler som lager tidsstempler for dato og tidspunktet 8. mai 1945 kl 0.00:

echo mktime(0, 0, 0, 5, 8, 1945, 1);

Dette vil skrive ut "-777952800".

echo mktime(0, 0, 0, 5, 8, 1945);

Dette vil også skrive ut "-777952800" fordi PHP har funnet ut at datoen er sommertid.

echo mktime(0, 0, 0, 5, 8, 1945, 0);

Dette vil skrive ut "-777949200" fordi vi har angitt at tiden ikke er sommertid.

strftime()

Skriv ut tid og dato som du selv vil. Funksjonen tar to verdier og returnerer en streng som formattert slik du har angitt.

Funksjonen tar en strengverdi og en valgfri heltallsverdi:

strftime(format [, tidsstempel])

Eksempler:

Vi bruker "0" som tidsstempel, som tilsvarer 1. januar 1970 (UNIX Epoch). Koden nedenfor vil skrive ut tidsinformasjon på norsk fordi språket er satt til norsk (verdien for setlocale() kan variere fra system til system, her er den "no_NO.ISO_8859-1"):

setlocale(LC_TIME, "no_NO.ISO_8859-1");
echo
strftime("%A %e. %B %Y", 0);

Her har vi brukt %A, %e, %B og %Y i formatstrengen vår ("%A %e. %B %Y"). Dette vil skrive ut "Torsdag 1. januar 1970" fordi vi har satt språkfilen til norsk. Hvorvidt det er store eller små bokstaver avhenger av hvordan språkfilen som brukes er lagt opp.

Verdier du kan bruke i format-strengen er:

%A: Ukedagsnavn i gjeldende systemspråk (f. eks. Mandag, Fredag)
%a: Forkortet ukedagsnavn i gjeldende systemspråk (f. eks. Man, Fre)
%B: Månedsnavn i gjeldende systemspråk (f. eks. Januar, September)
%b: Forkortet månedsnavn i gjeldende systemspråk (f. eks. Jan, Sep)
%c: Foretrukket tids- og datoformat for gjeldende systemspråk (f. eks. 17.05.03 08:13:58)
%C: Århundre-nummer (året dividert med 100 og gjort om til heltall, f.eks. 11, 99)
%D: Snarvei til dato i kortformat i.h.t. gjeldende systemspråk (f. eks. "%d.%m.%y")
%d: Tosifret månedsdag (fra "01" til "31")
%e: Månedsdagen med ledende mellomrom for 1 til 9 (fra " 1" til "31")
%G: Firesifret år som korresponderer med ISO-ukenumre (se %V). Samme format som %Y, men starter uke 1 i forrige år gir denne da det forrige året.
%g: Som %G, men to-sifret.
%H: Time, 24-timers klokke, med ledende 0 for 0-9 (fra "00" til "23")
%h: Som %b
%I: Time, 12-timers klokke, med ledende 0 for 1-9 (fra "01" til "12")
%j: Tresifret årsdag (fra 001 til 366)
%M: Tosifret minutter (fra 00 til 59)
%m: Tosifret måned (fra 01 til 12)
%n: Angir linjeskift
%p: Enten "am" eller "pm" eller tilsvarende verdi som angitt for språket som benyttes.
%R: Tidspunkt i 24-timers klokke.
%r: Tidspunkt i 12-timers klokke med "am" eller "pm"
%S: Tosifret sekunder (00 til 59)
%T: Snarvei til tid i formatet "%H:%M:%S"
%t: Tabulator-tegn
%u: Ukedagsnummer (fra 1 (for mandag) til 7 (for søndag)), operativsystemet Sun Solaris starter visstnok med 1 som søndag)
%V: Ukenummer der uke 1 er den første uken med minst fire dager fra det nye året (fra 01 til 53)
%W: Ukenummer der uke 1 er uken med første mandag i året (fra 01 til 52)
%w: Ukedagsnummer (fra 0 (for søndag) til 6 (for lørdag))
%X: Foretrukket tidsformat for gjeldende språk (f. eks. 08.13.58)
%x: Foretrukket datoformat for gjeldende språk (f. eks. 17.05.03)
%Y: Firesifret årstall (f. eks. 2003)
%y: Tosifret årstall (fra 00 til 99, f. eks. 03)
%Z: Tidssone, tidssonekode eller navn (f. eks. "+0200", "EET" eller "Finland, Lithuania, Estonia"), tidssonekoder og -navn i gjeldende systemspråk

strtotime()

Finn et tidsstempel for et tidsbegrep. Funksjonen tar en strengverdi som tilsvarer et tidsuttrykk på engelsk.

Funksjonen tar en strengverdi:

strtotime(uttrykk)

Eksempler


echo strtotime("1 January 1970");

Dette skriver ut "0", fordi strtotime() har tolket strengen "1 January 1970" til å tilsvare en dato som gir tidsstempelet "0".

echo strtotime("Next Thursday");
echo
strtotime("Yesterday");
echo
strtotime("+3 days");

Hva som skrives ut av de tre over avhenger av systemtiden, men strtotime() vil forsøke å skrive ut tidsstempelet for h.h.v. samme tidspunkt førstkommende torsdag, i går og om tre dager.

time()

Denne funksjonen henter tidsstempelet som gjelder ved kallet av funksjonen. Tidsstempelet angir hvor mange sekunder som er gått siden UNIX Epoch, som er 1. januar 1970 kl. 0.00 GMT. Funksjonen tar ingen parametre, og returnerer et heltall.

echo time();

Koden over skriver ut gjeldende tidsstempel, f. eks. "1043235670".

Opphavsrett

Ønsker du å gjengi denne artikkelen eller noe fra den må du gjerne gjøre det, men ikke glem kildereferanse. For å lenke til denne artikkelen kan du bruke URL-en http://www.gratisguide.net/artikler/php/tid-og-dato-i-php.html.

Tilbake til Artikler / PHP



Annonse

Annonse

Google

GratisGuide.net
» Forsiden
» Om oss
» Nyhetsbrev
» Lage lenker til oss
» Opphavsrett

Nyhetsklipp
» Hovedside
» RSS-feeds

Artikler
» Hovedside
» Apache webserver
» Domenenavn
» Grafikk og clipart
» HTML og CSS
  » Hjemmeside på 1-2-3
  » Lage en basis-side
» Javascript
» MySQL
» PHP
» Søkemotorer
» WAP og WML
» Webdesign

Ressurs-databasen
» Hovedside
» Dmoz / ODP
  » World/Norsk/
  » Regional/.../Norway/
» Domeneavn/e-post
» Gjestebøker
» Grafikk
» Innhold/syndikert
» Juridisk/nettikette
» Lenke-/bannerbytte
» Programmeringsspråk
  » HTML
  » Javascript
  » MySQL og SQL
  » PHP
  » WML-script
» Reklame/annonsering
» Søkemotorer/kataloger
» Statistikk/tellere
» Topplister
» Vedlikehold
» WAP og WML
» Webdesign-maler
» Webhotell
» Webmaster-forum
» Annet

Bokdatabasen
» Hovedside
» Databaser
» Handel og markedsføring
» Innholdsredigering
» Juridisk
» Programmering
» Programvare
» Websideutvikling
» Generelt

Kodeservice
» Hovedside
» Kodegeneratorer
  » Dato
  » Fylkesliste
  » Meta-merke
  » Rammesett
  » Søkebokser
  » Sprett-opp-vindu
  » Stilark
  » WML

Innholdstjenester
» Hovedside
» Diskusjonsforum
» IP-adresse
» Nyhetsoversikt
» Om dagen i dag