Я пытаюсь создать функцию, которая сравнивает дату с текущим временем и возвращает красиво отформатированную строку.
Я написал код в спешке, и он работает, но я пытаюсь найти более эффективный способ сделать это. Вот мой код:
function _formatDate($dateStr) { $timestr = ""; $t= time() - strtotime($dateStr); if($t < 60) { $timestr = "{$t} seconds ago"; } elseif ($t <120) { $timestr = "about a minute ago"; } elseif ($t < 3600) { $minute = floor($t/60); $timestr = "{$minute} minutes ago"; } elseif ($t < 7200) { $timestr = " about an hour ago"; } elseif ($t < 86400) { $hour = floor($t/3600); $timestr = "{$hour} hours ago"; } elseif ($t < 172800) { $timestr = "a day ago"; } elseif ($t < 2592000) { $day = floor($t/86400); $timestr = "{$day} days ago"; } elseif ($t < 5184000){ $timestr = "about a month ago"; } else { $month = floor($t/2592000); $timestr = "{$month} months ago"; } return $timestr; }
Некоторый код, который я использую, и он никогда не сбой, просто введите временную метку Unix, если вы используете второй аргумент в функции, которая может быть условием «to»
echo timeDiffrence('1300392875'); function timeDiffrence($from, $to = null){ $to = (($to === null) ? (time()) : ($to)); $to = ((is_int($to)) ? ($to) : (strtotime($to))); $from = ((is_int($from)) ? ($from) : (strtotime($from))); $units = array ( "y" => 29030400, // seconds in a year (12 months) "month" => 2419200, // seconds in a month (4 weeks) "w" => 604800, // seconds in a week (7 days) "d" => 86400, // seconds in a day (24 hours) "h" => 3600, // seconds in an hour (60 minutes) "m" => 60, // seconds in a minute (60 seconds) "s" => 1 // 1 second ); $diff = abs($from - $to); $suffix = (($from > $to) ? ("from now") : ("ago")); foreach($units as $unit => $mult) if($diff >= $mult) { //$and = (($mult != 1) ? ("") : ("and ")); $output .= "".$and.intval($diff / $mult)."".$unit.((intval($diff / $mult) == 1) ? ("") : ("")); $diff -= intval($diff / $mult) * $mult; } $output .= " ".$suffix; $output = substr($output, strlen("")); if($output =='go' || $output ==' ago'){$output = 'A few secs ago';} return $output; }
Я бы рекомендовал сделать это в javascript. Вы можете использовать плагин TimeAgo для jquery. Самое интересное в этом – это обновление в реальном времени на стороне клиента без обновления страницы. Это мертвое простое в использовании и соответствует вашим требованиям.