Snygga “datum”

Aug 11th, 2009 by Erik in PHP

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.

No Comments