mishanya Опубликовано 4 июля, 2015 Жалоба Поделиться Опубликовано 4 июля, 2015 находим файл /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"} В прикрепленных файлах готовый файликmodifier.date_format.zip Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 4 июля, 2015 Жалоба Поделиться Опубликовано 4 июля, 2015 Очень даже хорошая разработка, спасибо. Замечания такие:1. Сейчас, для использования русских названий надо писать полный список параметров типа {$post->date|date_format:"%d %m %Y":"":"rus"}, а в большинстве шаблонов используется сокращенный. Это неудобно2. Портится работа с форматом по умолчанию, то есть нельзя в настройках задать по умолчанию формат с русскими названиями месяцев. Поэтому, ИМХО, логичнее было бы добавить свой преобразователь, например %Z, вместо которого выводилось бы русское название месяца. Цитата Ссылка на сообщение Поделиться на другие сайты
zetwin Опубликовано 21 декабря, 2015 Жалоба Поделиться Опубликовано 21 декабря, 2015 Спасибо. Цитата Ссылка на сообщение Поделиться на другие сайты
Tarzan Опубликовано 21 декабря, 2015 Жалоба Поделиться Опубликовано 21 декабря, 2015 Здравствуйте. Объясните тупому - как и где это применить и для чего. И какая полезность от этого? Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 21 декабря, 2015 Автор Жалоба Поделиться Опубликовано 21 декабря, 2015 (изменено) Здравствуйте. Объясните тупому - как и где это применить и для чего. И какая полезность от этого? по умолчанию в smarty/simpla все месяцы на англ.языке, тоесть December, January, February и тд. чтобы вывести дату в формате "2 ноября" используется измененная ф-я, которая выше. Изменено 21 декабря, 2015 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
Tarzan Опубликовано 21 декабря, 2015 Жалоба Поделиться Опубликовано 21 декабря, 2015 по умолчанию в smarty/simpla все месяцы на англ.языке, тоесть December, January, February и тд. чтобы вывести дату в формате "2 ноября" используется измененная ф-я, которая выше.Спасибо Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 7 января, 2016 Жалоба Поделиться Опубликовано 7 января, 2016 Этот плагин давно уже не новость, найти его можно на просторах интернета.Мишаня зачем чужую работу присваиваешь? Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 7 января, 2016 Автор Жалоба Поделиться Опубликовано 7 января, 2016 Этот плагин давно уже не новость, найти его можно на просторах интернета.Мишаня зачем чужую работу присваиваешь? с чего ты взял что чужую? добавить 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'; } много ума не надо. когда нужно было одному из заказчиков в таком формате, тогда и переделал. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 8 января, 2016 Жалоба Поделиться Опубликовано 8 января, 2016 Много ума не надо чтобы использовать плагин автора и выдавать за свое. Если бы ты писал для заказчика то зачем использовал условие rus? Оно там вообще не нужно. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 8 января, 2016 Автор Жалоба Поделиться Опубликовано 8 января, 2016 Много ума не надо чтобы использовать плагин автора и выдавать за свое.Если бы ты писал для заказчика то зачем использовал условие rus? Оно там вообще не нужно. видимо затем чтобы вызывать форматирование с русскими месяцами.почему рус, потому что у меня еще и для укр. есть. Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 8 января, 2016 Жалоба Поделиться Опубликовано 8 января, 2016 Много ума не надо чтобы использовать плагин автора и выдавать за свое.Не вижу отличий решения от mishanya от решения по ссылке 2011 года. Или они есть? Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 8 января, 2016 Автор Жалоба Поделиться Опубликовано 8 января, 2016 (изменено) Не вижу отличий решения от 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'; } не мой? было бы из-за чего спорить Изменено 8 января, 2016 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 8 января, 2016 Жалоба Поделиться Опубликовано 8 января, 2016 Я не верю в совпадения, тем более уж больно все идентично. Помнится даже osben в свою сборку симплы включил этот модификатор, но он не заявлял что это его. Цитата Ссылка на сообщение Поделиться на другие сайты
Deni Опубликовано 8 февраля, 2016 Жалоба Поделиться Опубликовано 8 февраля, 2016 ребят, а подскажите как вывести дату , допустим так {$order->date|date} выводит текущую дату, а надо вывести текущую дату + 3 дня , смысл в том что я хочу в карточке товара вывести дату доставки .. не могу что-то додуматься ) Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 8 февраля, 2016 Жалоба Поделиться Опубликовано 8 февраля, 2016 ребят, а подскажите как вывести дату , допустим так {$order->date|date} выводит текущую дату, а надо вывести текущую дату + 3 дня , смысл в том что я хочу в карточке товара вывести дату доставки .. не могу что-то додуматься )Вот попробуйте: {"+3 days"|date_format:"%d.%m.%Y"} Цитата Ссылка на сообщение Поделиться на другие сайты
Deni Опубликовано 11 февраля, 2016 Жалоба Поделиться Опубликовано 11 февраля, 2016 Спасибо большое работает Цитата Ссылка на сообщение Поделиться на другие сайты
olgatcpip Опубликовано 23 октября, 2016 Жалоба Поделиться Опубликовано 23 октября, 2016 Этот плагин давно уже не новость, найти его можно на просторах интернета.Мишаня зачем чужую работу присваиваешь?Большое спасибо, что разоблачаете плагиатщиков. Тебе, Noxter в частности. Это плагин мой.rus я сделала, потому что вот $formatter='auto' Я полагала, что создаю новый формат так сказать. И если нужно в другом падеже дату написать, например, я просто залезу в код и проспрягаю месяца, например.И ещё полагала, что координально новый формат сделать. Мне тогда казалось это решение логичным. %Z вставить в голову не пришло и сейчас не кажется разумным. Мишаня, жаль, что ссылку на меня не дал. Хотя, допускаю, что слизал код у другого слизуна.К слову, решение мне не жалко. Я часто свои работы вижу там, сям. Но обычно мне в коменты пишут спасибо. А чего я пораньше не объявилась? Думала, 1 переход с этого сайта ничего не значит, два тоже... но сейчас очень много переходов от вас. За что и благодарю ещё раз Noxterа. Даже кланюсь. А потом некогда было... потом.. короче вот я нарисовалась поблагодарить. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 24 октября, 2016 Жалоба Поделиться Опубликовано 24 октября, 2016 Ну что же подождем ответа Мишани Цитата Ссылка на сообщение Поделиться на другие сайты
bananovsv Опубликовано 14 марта, 2017 Жалоба Поделиться Опубликовано 14 марта, 2017 А зачем заменять %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); Так и без форматтера можно обойтись и где надо выводить цифрами. Так можно делать? Это не вызовет ошибок нигде? Цитата Ссылка на сообщение Поделиться на другие сайты
arhean Опубликовано 1 июня, 2021 Жалоба Поделиться Опубликовано 1 июня, 2021 Как сделать вывод текущего дня на русском? к примеру - сегодня понедельник? Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 1 июня, 2021 Жалоба Поделиться Опубликовано 1 июня, 2021 https://developer.roman.grinyov.name/blog/60 Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.