PHP: <?php function ro_formatting_date($date) { $month = array( "01"=>"Января", "02"=>"Февраля", "03"=>"Марта", "04"=>"Апреля", "05"=>"Мая", "06"=>"Июня", "07"=>"Июля", "08"=>"Августа", "09"=>"Сентября", "10"=>"Октября", "11"=>"Ноября", "12"=>"Декабря" ); $datetounix_time = strtotime($date); $elapsed_time = time()-$datetounix_time; // Y-m-d 00:00:00 $start_date = strtotime(date("Y-m-d",$datetounix_time)); if ($elapsed_time < 0) { return "Your date does not match the server time."; exit(); } if ($elapsed_time <= 59) { $str = "только что"; } else if ($elapsed_time <= 3569) { $dig = (int) round($elapsed_time/60); if ( $dig == 1 || $dig == 21 || $dig == 31 || $dig == 41 || $dig == 51) { $case = "у"; } else if ( $dig > 1 && $dig <= 4 || $dig > 21 && $dig <= 24 || $dig > 31 && $dig <= 34 || $dig > 41 && $dig <= 44 || $dig > 51 && $dig <= 54) { $case = "ы"; } else if ( $dig > 4 && $dig <= 20 || $dig > 24 && $dig <= 30 || $dig > 34 && $dig <= 40 || $dig > 44 && $dig <= 50 || $dig > 54 && $dig <= 59) { $case = ""; } else { $case = "_"; } $str = (($dig == 1) ? "" : $dig)." минут".$case." назад"; } else if ($elapsed_time >= 3570 && $elapsed_time <= 21600) { $dig = (int) round($elapsed_time/3600); if ($dig == 1) { $dig = ""; $case = ""; } else if ($dig > 1 && $dig <= 4) { $case = "а"; } else if ($dig >= 5 && $dig <= 12) { $case = "ов"; } $str = (($dig == 1) ? "" : $dig)." час".$case." назад"; } else if (strcmp(date("Y-m-d",$datetounix_time),date("Y-m-d")) == 0) { $str = "сегодня в ".date("H:i",$datetounix_time); } else if (($start_date+86400) <= time() && time() <= ($start_date+(86400*2))) { $str = "вчера в ".date("H:i",$datetounix_time); } else { $str = date("d",strtotime($date))." ".$month[date("m",strtotime($date))]." ".date("Y",strtotime($date))." в ".date("H:i",strtotime($date)); } return $str; } ?> Написал вот такой скрипт, для отображения красивой даты хотелось бы услышать о минусах и плюсах, и вообще правильно я подошел к созданию скрипта...
Строка 93: Код (Text): else if (($start_date+86400) <= time() && time() <= ($start_date+(86400*2))) мне кажется что такой подход вычисления вчерашней даты не очень правильный... я пытался как-то по другому пересмотреть но пока не могу ничего придумать ...
time() - $start_date < 86400 ? PHP: <?php function shortdate ($date) { $r = false; $a = preg_split("/[:\.\s-]+/", $date); $du = time() - get_unix($date); if ($du < 3600) { //минут назад switch (floor($du/60)) { case 1: return 'только что'; break; case 2: return 'только что'; break; case 3: return 'три минуты назад'; break; case 4: return 'четыре минуты назад'; break; case 5: return 'пять минут минуты назад'; break; default: return floor($du/60).' мин. назад'; break; }; } elseif ($du < 18000) { //часов назад switch (floor($du/3600)) { case 1: return 'час назад'; break; case 2: return 'два часа назад'; break; case 3: return 'три часа назад'; break; case 4: return 'четыре часа назад'; break; }; } elseif ($du < 172800) { //сегодня if (date('d')==$a[2]) { return "сегодня в {$a[3]}:{$a[4]}";} if (date('d', time() - 86400)==$a[2]) { return "вчера в {$a[3]}:{$a[4]}";} if (date('d', time() - 172800)==$a[2]) { return "позавчера в {$a[3]}:{$a[4]}";} } else { $r = "{$a[2]}.{$a[1]}"; if ($a[0] != date('Y')) { $r .= '.'.$a[0]; } $r .= " {$a[3]}:{$a[4]}"; } return $r; } function get_unix ($date='') { if ($date=='') { return time(); } $cyear = 0; $cmonth = 0; $cday = 0; $chour = 0; $cminu = 0; $csecu = 0; $t=array(); $t= preg_split("/[:\.\s-]+/", $date); if (isset($t[0])) { $cyear = (int)$t[0]; } if (isset($t[1])) { $cmonth =(int)$t[1]; } if (isset($t[2])) { $cday = (int)$t[2]; } if (isset($t[3])) { $chour = (int)$t[3]; } if (isset($t[4])) { $cminu = (int)$t[4]; } if (isset($t[5])) { $csecu = (int)$t[5]; } return mktime((int)$chour, (int)$cminu, (int)$csecu, (int)$cmonth, (int)$cday, (int)$cyear); } ?> Когда мне надо было - сделал такие наброски, но доводить до ума не стал. Хотя изрядно можно напильником подлатать.