Переводим дату в понятный формат

Добрый день. Сегодня мы поговорим о том как переводить дату. Например когда вы видите дату 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));

Вот и всё. Впринцепи нечего сложного. Спасибо за внимание.
Теги:
дата
Добавлено: 16 Мая 2018 19:28:49 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...