Функция за четимо представяне на разлика между 2 дати
На много места в сайтовете ви се налага да показвате дата, било то на публикация или последно обновяване на страница. От известно време се наблюдава тенденция да се променя начина на представяне на датите към по-четим за потребителите формат, с думи, пред старото изливане начислата от датата.
По-долу можете да видите една примерна функция. На практика няма нищо особено в тази функция - форматирането се извършва на базата на определяне на интервала, в който попада изминалото време между двете дати, защото все пак не е уместно времето между два понеделника да се изписва в минути та да се получи “преди 10080 минути”.
function TimeAgo($datefrom,$dateto=-1) { // Началната дата е 01.01.1970 if($datefrom<=0) { return "Преди много време"; } if($dateto==-1) { $dateto = time(); } // Разлика в секунди между датите $difference = $dateto - $datefrom; // Ако разликата е под минута, показваме секундите if($difference < 60) { $interval = "s"; } // Ако интервала е между 1 и 60 минути показваме минутите elseif($difference >= 60 && $difference<60*60) { $interval = "n"; } // Ако интервала е между 1 и 24 часа, показваме часовете elseif($difference >= 60*60 && $difference<60*60*24) { $interval = "h"; } // Ако е в рамките на седмицата, показваме дните elseif($difference >= 60*60*24 && $difference<60*60*24*7) { $interval = "d"; } // Ако е между 1 и 30 дена, показваме седмиците elseif($difference >= 60*60*24*7 && $difference < 60*60*24*30) { $interval = "ww"; } // Ако интервала е между 30 дена и 1 година показваме месеците elseif($difference >= 60*60*24*30 && $difference < 60*60*24*365) { $interval = "m"; } // Ако интервала е над 365 дена показваме годините elseif($difference >= 60*60*24*365) { $interval = "y"; } /* * На база на интервала определяме броя единици * между датите.Също така определяме думичките * за ед./мн. число (ако е 1 или са повече) */ switch($interval) { case "m": $months_difference = floor($difference / 60 / 60 / 24 / 29); while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom)+($months_difference), date("j", $dateto), date("Y", $datefrom)) < $dateto) { $months_difference++; } $datediff = $months_difference; // We need this in here because it is possible // to have an 'm' interval and a months // difference of 12 because we are using 29 days // in a month if($datediff==12) { $datediff--; } $res = ($datediff==1) ? "преди месец" : "преди $datediff месеца"; break; case "y": $datediff = floor($difference / 60 / 60 / 24 / 365); $res = ($datediff==1) ? "преди година" : "преди $datediff години"; break; case "d": $datediff = floor($difference / 60 / 60 / 24); $res = ($datediff==1) ? "преди един ден" : "преди $datediff дена"; break; case "ww": $datediff = floor($difference / 60 / 60 / 24 / 7); $res = ($datediff==1) ? "преди седмица" : "преди $datediff седмици"; break; case "h": $datediff = floor($difference / 60 / 60); $res = ($datediff==1) ? "преди час" : "преди $datediff часа"; break; case "n": $datediff = floor($difference / 60); $res = ($datediff==1) ? "преди минута" : "преди $datediff минути"; break; case "s": $datediff = $difference; $res = ($datediff==1) ? "перди секунда" : "перди $datediff секунди"; break; } return $res; }











