Перейти к содержимому


Фото
* * * * * 1 голосов

Вывод даты в русском формате

date_format вывод даты русская дата

  • Чтобы отвечать, сперва войдите на форум
18 ответов в теме

#1 mishanya

mishanya
  • Фрилансер
  • 2 575 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 04.07.2015 - 10:10

находим файл /Smarty/libs/plugins/modifier.date_format.php

 

меняем стандартную ф-ю отображения даты:

function smarty_modifier_date_format($string, $format=null, $default_date='', $formatter='auto')
{
    if ($format === null) {
        $format = Smarty::$_DATE_FORMAT;
    }
    /**
    * Include the {@link shared.make_timestamp.php} plugin
    */
    require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
    if ($string != '' && $string != '0000-00-00' && $string != '0000-00-00 00:00:00') {
        $timestamp = smarty_make_timestamp($string);
    } elseif ($default_date != '') {
        $timestamp = smarty_make_timestamp($default_date);
    } else {
        return;
    }
    if ($formatter=='strftime'||($formatter=='auto'&&strpos($format,'%')!==false)) {
        if (DS == '\\') {
            $_win_from = array('%D', '%h', '%n', '%r', '%R', '%t', '%T');
            $_win_to = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S');
            if (strpos($format, '%e') !== false) {
                $_win_from[] = '%e';
                $_win_to[] = sprintf('%\' 2d', date('j', $timestamp));
            }
            if (strpos($format, '%l') !== false) {
                $_win_from[] = '%l';
                $_win_to[] = sprintf('%\' 2d', date('h', $timestamp));
            }
            $format = str_replace($_win_from, $_win_to, $format);
        }

        return strftime($format, $timestamp);
    } else {
        return date($format, $timestamp);
    }
}

на модифицированную:

 

function smarty_modifier_date_format($string, $format=null, $default_date='', $formatter='auto')
{
    if ($format === null) {
        $format = Smarty::$_DATE_FORMAT;
    }
    /**
    * Include the {@link shared.make_timestamp.php} plugin
    */
    require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
    if ($string != '' && $string != '0000-00-00' && $string != '0000-00-00 00:00:00') {
        $timestamp = smarty_make_timestamp($string);
    } elseif ($default_date != '') {
        $timestamp = smarty_make_timestamp($default_date);
    } else {
        return;
    }

    if($formatter=='rus')
    {
        $months = array (
            1 => 'января',
            2 => 'февраля',
            3 => 'марта',
            4 => 'апреля',
            5 => 'мая',
            6 => 'июня',
            7 => 'июля',
            8 => 'августа',
            9 => 'сентября',
           10 => 'октября',
           11 => 'ноября',
           12 => 'декабря');
        
        $format = str_replace("%m",$months[(int)date('m',$timestamp)],$format);
        $formatter='auto';
    }    

    if ($formatter=='strftime'||($formatter=='auto'&&strpos($format,'%')!==false)) {
        if (DS == '\\') {
            $_win_from = array('%D', '%h', '%n', '%r', '%R', '%t', '%T');
            $_win_to = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S');
            if (strpos($format, '%e') !== false) {
                $_win_from[] = '%e';
                $_win_to[] = sprintf('%\' 2d', date('j', $timestamp));
            }
            if (strpos($format, '%l') !== false) {
                $_win_from[] = '%l';
                $_win_to[] = sprintf('%\' 2d', date('h', $timestamp));
            }
            $format = str_replace($_win_from, $_win_to, $format);
        }

        return strftime($format, $timestamp);
    } else {
        return date($format, $timestamp);
    }
}

после этого можно вызывать модификатор например так:

{$post->date|date_format:"%d %m %Y":"":"rus"}

 

В прикрепленных файлах готовый файлик

Прикрепленные файлы:



#2 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 04.07.2015 - 10:39

Очень даже хорошая разработка, спасибо.

 

Замечания такие:

1. Сейчас, для использования русских названий надо писать полный список параметров типа {$post->date|date_format:"%d %m %Y":"":"rus"}, а в большинстве шаблонов используется сокращенный. Это неудобно

2. Портится работа с форматом по умолчанию, то есть нельзя в настройках задать по умолчанию формат с русскими названиями месяцев.

 

Поэтому, ИМХО, логичнее было бы добавить свой преобразователь, например %Z, вместо которого выводилось бы русское название месяца.



#3 zetwin

zetwin
  • Пользователь
  • 24 сообщений

Опубликовано 21.12.2015 - 11:29

Спасибо.



#4 Tarzan

Tarzan
  • Пользователь
  • 47 сообщений
  • Пользователь
  • Откуда:Донецкая Народная Республика

Опубликовано 21.12.2015 - 11:45

Здравствуйте. Объясните тупому - как и где это применить и для чего. И какая полезность от этого?



#5 mishanya

mishanya
  • Фрилансер
  • 2 575 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 21.12.2015 - 11:49

Здравствуйте. Объясните тупому - как и где это применить и для чего. И какая полезность от этого?

 

по умолчанию в smarty/simpla все месяцы на англ.языке, тоесть December, January, February и тд. чтобы вывести дату в формате "2 ноября" используется измененная ф-я, которая выше.


Изменено: mishanya, 21.12.2015 - 11:49


#6 Tarzan

Tarzan
  • Пользователь
  • 47 сообщений
  • Пользователь
  • Откуда:Донецкая Народная Республика

Опубликовано 21.12.2015 - 11:52

по умолчанию в smarty/simpla все месяцы на англ.языке, тоесть December, January, February и тд. чтобы вывести дату в формате "2 ноября" используется измененная ф-я, которая выше.

Спасибо



#7 Noxter

Noxter
  • Забаненый
  • 1 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 08.01.2016 - 00:22

Этот плагин давно уже не новость, найти его можно на просторах интернета.
Мишаня зачем чужую работу присваиваешь?

#8 mishanya

mishanya
  • Фрилансер
  • 2 575 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 08.01.2016 - 00:42

Этот плагин давно уже не новость, найти его можно на просторах интернета.
Мишаня зачем чужую работу присваиваешь?

 

с чего ты взял что чужую? добавить

    if($formatter=='rus')
    {
        $months = array (
            1 => 'января',
            2 => 'февраля',
            3 => 'марта',
            4 => 'апреля',
            5 => 'мая',
            6 => 'июня',
            7 => 'июля',
            8 => 'августа',
            9 => 'сентября',
           10 => 'октября',
           11 => 'ноября',
           12 => 'декабря');
        
        $format = str_replace("%m",$months[(int)date('m',$timestamp)],$format);
        $formatter='auto';
    }   

много ума не надо. когда нужно было одному из заказчиков в таком формате, тогда и переделал.



#9 Noxter

Noxter
  • Забаненый
  • 1 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 08.01.2016 - 09:38

Много ума не надо чтобы использовать плагин автора и выдавать за свое.
Если бы ты писал для заказчика то зачем использовал условие rus? Оно там вообще не нужно.

#10 mishanya

mishanya
  • Фрилансер
  • 2 575 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 08.01.2016 - 09:42

Много ума не надо чтобы использовать плагин автора и выдавать за свое.
Если бы ты писал для заказчика то зачем использовал условие rus? Оно там вообще не нужно.

 

видимо затем чтобы вызывать форматирование с русскими месяцами.почему рус, потому что у меня еще и для укр. есть. 



#11 Kors

Kors
  • Фрилансер
  • 3 522 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Россия

Опубликовано 08.01.2016 - 10:27

Много ума не надо чтобы использовать плагин автора и выдавать за свое.

Не вижу отличий решения от mishanya от решения по ссылке 2011 года. Или они есть?

#12 mishanya

mishanya
  • Фрилансер
  • 2 575 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 08.01.2016 - 10:44

Не вижу отличий решения от mishanya от решения по ссылке 2011 года. Или они есть?

 

нет. их нет. и это доказывает что этот кусок

    if($formatter=='rus')
    {
        $months = array (
            1 => 'января',
            2 => 'февраля',
            3 => 'марта',
            4 => 'апреля',
            5 => 'мая',
            6 => 'июня',
            7 => 'июля',
            8 => 'августа',
            9 => 'сентября',
           10 => 'октября',
           11 => 'ноября',
           12 => 'декабря');
        
        $format = str_replace("%m",$months[(int)date('m',$timestamp)],$format);
        $formatter='auto';
    }   

не мой? было бы из-за чего спорить


Изменено: mishanya, 08.01.2016 - 10:45


#13 Noxter

Noxter
  • Забаненый
  • 1 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 08.01.2016 - 11:15

Я не верю в совпадения, тем более уж больно все идентично.
Помнится даже osben в свою сборку симплы включил этот модификатор, но он не заявлял что это его.

#14 Deni

Deni
  • Пользователь
  • 36 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x

Опубликовано 09.02.2016 - 00:35

ребят, а подскажите как вывести дату , допустим так  {$order->date|date} выводит текущую дату, а надо вывести текущую дату + 3 дня , смысл в том что я хочу в карточке товара вывести дату доставки .. не могу что-то додуматься ) 



#15 Noxter

Noxter
  • Забаненый
  • 1 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 09.02.2016 - 01:12

ребят, а подскажите как вывести дату , допустим так  {$order->date|date} выводит текущую дату, а надо вывести текущую дату + 3 дня , смысл в том что я хочу в карточке товара вывести дату доставки .. не могу что-то додуматься )

Вот попробуйте:
{"+3 days"|date_format:"%d.%m.%Y"}


#16 Deni

Deni
  • Пользователь
  • 36 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x

Опубликовано 11.02.2016 - 10:50

Спасибо большое работает :) 



#17 olgatcpip

olgatcpip
  • Пользователь
  • 1 сообщений
  • Программирование
  • Откуда:Красноярск

Опубликовано 23.10.2016 - 09:10

Этот плагин давно уже не новость, найти его можно на просторах интернета.
Мишаня зачем чужую работу присваиваешь?

Большое спасибо, что разоблачаете плагиатщиков. Тебе, Noxter в частности.

 

Это плагин мой.

rus я сделала, потому что вот

 

$formatter='auto'
 

 

Я полагала, что создаю новый формат так сказать. И если нужно в другом падеже дату написать, например, я просто залезу в код и проспрягаю месяца, например.И ещё полагала, что координально новый формат сделать. Мне тогда казалось это решение логичным. %Z вставить в голову не пришло и сейчас не кажется разумным.

 

Мишаня, жаль, что ссылку на меня не дал. Хотя, допускаю, что слизал код у другого слизуна.

К слову, решение мне не жалко. Я часто свои работы вижу там, сям. Но обычно мне в коменты пишут спасибо. 

 

А чего я пораньше не объявилась? Думала, 1 переход с этого сайта ничего не значит, два тоже... но сейчас очень много переходов от вас. За что и благодарю ещё раз Noxterа. Даже кланюсь. А потом некогда было... потом.. короче вот я нарисовалась поблагодарить.

:D



#18 Noxter

Noxter
  • Забаненый
  • 1 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 24.10.2016 - 15:43

Ну что же подождем ответа Мишани :D

#19 bananovsv

bananovsv
  • Пользователь
  • 147 сообщений

Опубликовано 14.03.2017 - 20:17

А зачем заменять %m, который выводит месяцы цифрами? Почему не %B, чтобы заменить именно английские слова?

$months = array (
    1 => 'января',
    2 => 'февраля',
    3 => 'марта',
    4 => 'апреля',
    5 => 'мая',
    6 => 'июня',
    7 => 'июля',
    8 => 'августа',
    9 => 'сентября',
    10 => 'октября',
    11 => 'ноября',
    12 => 'декабря');
$format = str_replace("%B",$months[(int)date('m',$timestamp)],$format); 

Так и без форматтера можно обойтись и где надо выводить цифрами.

 

Так можно делать? Это не вызовет ошибок нигде?







Также с меткой «date_format, вывод даты, русская дата»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых