Хелперы для работы с датой в Kohana

В Kohana очень много полезных хелперов (helpers), но иногда их недостаточно. Привожу пример нескольких полезных хелперов для работы с датой.

Хелперы для работы с датой в Kohana
Для начала создадим файл date.php в папке classes нашего фреймворка. Это будет класс хелпера, который будет унаследован от нативного класса фрэймворка Kohana_DATE.

<?php
defined('SYSPATH') or die('No direct script access.');
/*
 * Класс расширяющий хелпер Kohana_DATE
 */
class DATE extends Kohana_DATE {
 
}

Список хелперов:

ru_month - Название месяцев на русском языке по номеру месяца
ru_hollyday - Выходные дни в Беларуси. Легко пределать под любую стану.
human_ru_time - Перевод вермени в человекопонятную форму (Типа: 2 часа назад и т.д.).
ru_week - День надели словами (пятница, суппота и т.д.).
mktime_from_input_date - Перобразует строку даты формата 2012-11-29 в метку времени
Далее я привожу сами хелперы с подробными комментариями.

<?php
defined('SYSPATH') or die('No direct script access.');
/*
 * Класс расширяющий хелпер Kohana_DATE
 */
class DATE extends Kohana_DATE {
    /**
     * Название месяцев на русском языке по номеру месяца
     * @param int $n номер месяца от 1 до 12
     * @param bool $end с окончанием или без (январь/января)
     * @return string
     */
    public static function ru_month($n, $end = false){
        $month_name =
            array(
                1 => 'января',
                2 => 'февраля',
                3 => 'марта',
                4 => 'апреля',
                5 => 'мая',
                6 => 'июня',
                7 => 'июля',
                8 => 'августа',
                9 => 'сентября',
                10 => 'октября',
                11 => 'ноября',
                12 => 'декабря'
            );
        $month_name_end =
            array(
                1 => 'январь',
                2 => 'февраль',
                3 => 'март',
                4 => 'апрель',
                5 => 'май',
                6 => 'июнь',
                7 => 'июль',
                8 => 'август',
                9 => 'сентябрь',
                10 => 'октябрь',
                11 => 'ноябрь',
                12 => 'декабрь'
            );
        return $end ? $month_name_end[$n] : $month_name[$n];
    }
 
    /**
     * Выходные дни в РБ
     * @param int $d день
     * @param int $m месяц
     * @return boolean
     */
    public static function ru_hollyday($d, $m){
        $hollyday = array(
            1   => 1,
            7   => 1,
            8   => 3,
            1   => 5,
            9   => 5,
            3   => 7,
            7   => 11,
            25  => 12,
            // нет радуницы
        );
 
        if (! empty ($hollyday[$d]) && $hollyday[$d] == $m) {
            return true;
        }
        else {
            return false;
        }
    }
 
    /**
     * Перевод вермени в человекопонятную форму
     * @param unix time string $time
     * @return string
     */
    public static function human_ru_time($time) {
 
        $month_name = date::ru_month(date('n', $time));
 
        $month = $month_name[date('n', $time)];
        $day = date('j', $time);
        $year = date('Y', $time);
        $hour = date('G', $time);
        $min = date('i', $time);
 
        $date = $day . ' ' . $month . ' ' . $year . ' г. в ' . $hour . ':' . $min;
 
        $dif = time() - $time;
 
        if ($dif < 59) {
            return $dif . " сек. назад";
        } elseif ($dif / 60 > 1 and $dif / 60 < 59) {
            return round($dif / 60) . " мин. назад";
        } elseif ($dif / 3600 > 1 and $dif / 3600 < 23) {
            return round($dif / 3600) . " час. назад";
        } else {
            return $date;
        }
    }
 
    /**
     * День надели словами
     * @param $n Номер недели от 0 до 6
     * @param bool $more Полнео название или сокращенное
     * @return mixed
     */
    public static function ru_week($n, $more = FALSE){
        $week_name =
            array(
                0 => 'вс',
                1 => 'пн',
                2 => 'вт',
                3 => 'ср',
                4 => 'чт',
                5 => 'пт',
                6 => 'сб',
            );
        $week_name_more =
            array(
                0 => 'воскресенье',
                1 => 'понедельник',
                2 => 'вторник',
                3 => 'среда',
                4 => 'четверг',
                5 => 'пятница',
                6 => 'суббота',
            );
        return $more ? $week_name_more[$n] : $week_name[$n];
    }
 
    /**
     * Перобразует строку даты формата 2012-11-29 в метку времени
     * @param string $str формат 2012-11-29
     * @return int метка времени
     */
    public static function mktime_from_input_date($str){
        $date_arr = explode('-', $str);
        return mktime(0, 0, 0, $date_arr[1], $date_arr[2], $date_arr[0]);
    }
}
Теги:
Хелперы
Добавлено: 20 Апреля 2018 17:12:45 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...