Добрый день. Сегодня мы поговорим о том как переводить дату. Например когда вы видите дату 02-06-2010 это не совсем приятно, и плохо воспринимается глазом. Для этого был придуман класс на PHP, который используется почти во всех CMS на данный момент. Он переводит дату в такой формат:Сегодня, 02:38. Вчера, 03:35. 3 Февраля, 12ч. 30мин.
Переводим дату в понятный формат
Возможности:
- Перевод даты(timestamp) в формат: Сегодня, 8:55. Вчера, 15:55.
- Перевод секунд в формат: 2 м. 7 д. 12ч. 30мин.
PHP code:
class DateClass
{
static protected $_LANGDATE = array (
'January' => "января",
'February' => "февраля",
'March' => "марта",
'April' => "апреля",
'May' => "мая",
'June' => "июня",
'July' => "июля",
'August' => "августа",
'September' => "сентября",
'October' => "октября",
'November' => "ноября",
'December' => "декабря",
'Jan' => "янв",
'Feb' => "фев",
'Mar' => "мар",
'Apr' => "апр",
'Jun' => "июн",
'Jul' => "июл",
'Aug' => "авг",
'Sep' => "сен",
'Oct' => "окт",
'Nov' => "ноя",
'Dec' => "дек",
'Sunday' => "Воскресенье",
'Monday' => "Понедельник",
'Tuesday' => "Вторник",
'Wednesday' => "Среда",
'Thursday' => "Четверг",
'Friday' => "Пятница",
'Saturday' => "Суббота",
'Sun' => "Вс",
'Mon' => "Пн",
'Tue' => "Вт",
'Wed' => "Ср",
'Thu' => "Чт",
'Fri' => "Пт",
'Sat' => "Сб",
);
/**
* @desc translate eng=>rus
*/
static public function _date($format, $timestamp)
{
return strtr(@date($format, $timestamp), self::$_LANGDATE);
}
/**
* @desc convert unix-timestamp to norm date (Now ...., Yesterday ...., and etc)
* @param int $timestamp unix-timestamp
* @return string time
*/
static public function make_date($timestamp)
{
if (date('Ymd', $timestamp) == date('Ymd', time()))
{
return 'Сегодня'. self::_date(', H:i', $timestamp);
}
elseif(date('Ymd', $timestamp) == date('Ymd', (time() - 86400)))
{
return 'Вчера' . self::_date(', H:i', $timestamp);
}
else
{
return self::_date('j-m-Y, H:i', $timestamp);
}
}
CONST PERIOD_YEAR = 31536000;
CONST PERIOD_MONTH = 2592000;
CONST PERIOD_DAY = 86400;
CONST PERIOD_HOUR = 3600;
CONST PERIOD_MINUTE = 60;
/**
* @desc convert seconds to norm format (y.d.m.h)
* @param int $seconds seconds
* @return string time
*/
static public function sec_to_time($seconds)
{
//self::_number_ending($n, "продуктов", "продукт", "продукта")
$seconds_period = array(
self::PERIOD_YEAR => 'г.',
self::PERIOD_MONTH => 'м',
self::PERIOD_DAY => 'д.',
self::PERIOD_HOUR => 'ч.',
self::PERIOD_MINUTE => 'мин.',
);
$out = '';
foreach ($seconds_period as $period => $date_words) {
$number = floor($seconds / $period);
$out .= $number ? $number.$date_words.' ' : '';
$seconds -= $number * $period;
}
return $out;
}
}
Проверить работоспособность класса можно следующим кодом:
echo DateClass::make_date(time()-rand(1,10000));
echo DateClass::sec_to_time(60*60*rand(1,60));
Вот и всё. Впринцепи нечего сложного. Спасибо за внимание.