Pen datoformatering i PHP
Jeg har alltid vært av den oppfatning at unødig informasjon bør fjernes. Dette kommer spesielt til sin rett på Internett, hvor brukerne er mer utålmodige enn noe annet sted. Da snakker jeg ikke primært om unødig data i artikler e.l., men i form av presentasjon av data. Eksempler på dette kan være å erstatte lange datolinjer dersom innholdet er publisert inneværende dag med "I dag" og å strippe vekk ledende 0-siffer fra datoer mellom 1.-9.
Til datoformatering bruker jeg PHP-funksjonen strftime(), men å få identiske resultater på tvers av plattformer var ikke så lett som jeg hadde ventet. I utgangspunktet så datofunksjonen jeg brukte slik ut:
<?php
function formatDate($timestamp) {
return strftime(EBA_TIME_FORMAT, $timestamp);
}
?> Funksjonen over er helt banal, og tar bare imot et tidspunkt som parameter og returnerer datoen formatert med EBA_TIME_FORMAT, en konstant som inneholder en formatverdi, f.eks. %m/%d/%y.
Neste steg i prosessen var å sjekke om datoformatet kun viste dag, måned og år, for deretter å erstatte det med "I dag"-oversettelsen fra den valgte språkfilen, samt legge inn klokkeslettet informasjonen ble publisert:
<?php
function formatDate($timestamp) {
$template = template::getInstance();
if (date('d.m.Y') == date('d.m.Y', $timestamp)) {
return $template->getLng('dateToday') . ', ' . date('H:i', $timestamp);
}
return strftime(EBA_TIME_FORMAT, $timestamp);
}
?>Og nå kommer den vanskelige delen. Dersom datoformatet i EBA_TIME_FORMAT benytter seg av %e-specifieren, er det ulike tolkninger på Windows og Linux. Rettere sagt: Den fungerer ikke på Windows, hvilket var årsaken til at jeg fikk blankt resultat lokalt, mens det fungerte fint her på skriblerier.net. Synd, for på Linux returnerer den datoen uten 0-prefikset, og problemet ville vært løst på en ren måte.
Resultatet ble at jeg måtte fortsette å bruke %d, men legge inn en sjekk om første tegn i den formaterte datoen var 0. Hvis ja, stripp den vekk og returner resten, hvis nei, bare returner svaret som det er. På den måten fikk jeg også bukt med det ledende (og unødvendige) 0-tegnet for artikler postet før den 10. i hver måned.
Den endelige koden ser slik ut og virker å gjøre jobben feilfritt:
<?php
function formatDate($timestamp) {
$template = template::getInstance();
if (date('d.m.Y') == date('d.m.Y', $timestamp)) {
return $template->getLng('dateToday') . ', ' . date('H:i', $timestamp);
}
$date = strftime(EBA_TIME_FORMAT, $timestamp);
if ($date{0} == 0) {
return substr($date, 1, strlen($date));
}
return $date;
}
?>
Kommentarer (2)
Vising som "i går", "i forgårs" er også gode – fremfor å dytte inn en lang dato, for å si at innlegget ble postet for én dag siden. Så lenge du ikke er av typen som liger "x uker/måneder/år", så skal det gå bra.
Legg til kommentar
Om «Andersson Online»
Dette er Espen Anderssons lekeplass på Internett. Jeg studerer webkommunikasjon på NITH Oslo og arbeider deltid som systemutvikler for NordkappNett AS og webutvikler for Nexus Consulting AS. Bloggens hovedfokus er rettet mot kultur- og teknologirelaterte temaer, med hyppige avstikkere innom musikken og journalistikkens verden.
Kategorier
- Film- og musikkanmeldelser (193)
- Generelt IT-stoff (140)
- Egosentrisk (57)
- Kulturprat (80)
- Ukategoriserte skriblerier (53)
Siste kommentarer
- påljoakim – «Filmåret 2008 – årets beste …»
- Jacob Olsen – «Filmåret 2008 – årets beste …»
- David Steinsland – «Max Manus (2008)»
- Martin Bekkelund – «God jul og et godt nytt år!»
- Audun Sæther – «God jul og et godt nytt år!»
Sist sette filmer
Gomorra (2008)
Matteo Garrone
Man Who Knew Too Much, The (1956)
Alfred Hitchcock
Flammen & Citronen (2008)
Ole Christian Madsen
Family Plot (1976)
Alfred Hitchcock
Curious Case of Benjamin Button, The (2008)
David Fincher
Lakeview Terrace (2008)
Neil LaBute
The X Files: I Want to Believe (2008)
Chris Carter
Sist avspilte låter fra last.fm
- Tougher Then The Rest
Bruce Springsteen
Spilt nå nettopp
Walk Like a Man
Bruce Springsteen
I dag klokka 19:00:42
Cautious Man
Bruce Springsteen
I dag klokka 18:56:43
Bloggrull
- Arne Hjorth Johansen
- Asbjørn Ness
- Astrid Sann Evensen
- Audun Lade Sæther
- Bloggrevyen
- Captain Charisma
- Cavey
- Erlend Klakegg Bergheim
- Espen Iversen
- Filmantrop
- Fred Ut, Sønn
- Ivar Hagen
- Jonas Larsen
- Lasse G. Dahl
- Martin Bekkelund
- Mia Holte
- Mikael Brevik
- Nils J. Nesse
- Stian Andreassen
- Trond Johansen
- Yngve Thoresen

Ahh… herlig. Godt å se at du ikke bruker global! Jeg kommer å ødelegger alle filmene dine hvis jeg ser det i EBA noen sted! Altså, den neste versjonen.