Snygga “datum”
Aug 11th, 2009 by Erik in PHP
No Comments 

Hittade lite kod om hur man fick sina datum till “5 dagar sedan” och så här, men det var ju C#, så jag gjorde en php-variant på svenska:
function time_since($since) {
$delta = (time() - strtotime($since));
if ($delta < 60){
return $delta == 1 ? "en sekund sedan" : $delta . " sekunder sedan";
}
if ($delta < 120){
return "en minut sedan";
}
if ($delta < 2700){
return round($delta/60) . " minuter sedan";
}
if ($delta < 5400){
return "en timme sedan";
}
if ($delta < 86400){
return round($delta/3600) . " timmar sedan";
}
if ($delta < 172800){
return "igår";
}
if ($delta < 2592000){
return round($delta/(3600*24)) . " dagar sedan";
}
if ($delta < 31104000){
return round($delta/(3600*24*30)) <= 1 ? "en månad sedan" : round($delta/(3600*24*30)) . " månader sedan";
}
return round($delta/(3600*24*365)) <= 1 ? "ett år sedan" : round($delta/(3600*24*365)) . " år sedan";
}
Det snygga är att strtotime kan matas med i stort sett alla datumformat, så några exempel är:
echo time_since("2009-03-22"); //22:a mars
echo time_since("2009-W30"); //Vecka 30 år 2009
echo time_since("2009-08-11T13:39Z");
Den sista är ett ISO 8601-format, så typ allt funkar.
Det enda som inte är 100%-igt är att jag utgår ifrån att en månad är 30 dagar, men är man petig kan man ju skriva “ungefär” innan.