<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Форум ReadyScript &mdash; Кракозябры в дате]]></title>
		<link>https://forum.readyscript.ru/topic/311/krakozyabry-v-date/</link>
		<atom:link href="https://forum.readyscript.ru/feed/rss/topic/311/" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Кракозябры в дате».]]></description>
		<lastBuildDate>Tue, 31 Mar 2015 05:33:08 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Кракозябры в дате]]></title>
			<link>https://forum.readyscript.ru/post/1102/#p1102</link>
			<description><![CDATA[<p>Спасибо. Полезная информация.</p>]]></description>
			<author><![CDATA[null@example.com (Sergey T.)]]></author>
			<pubDate>Tue, 31 Mar 2015 05:33:08 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/1102/#p1102</guid>
		</item>
		<item>
			<title><![CDATA[Re: Кракозябры в дате]]></title>
			<link>https://forum.readyscript.ru/post/1096/#p1096</link>
			<description><![CDATA[<p>Насколько я понял вы внесли изменения в стандартный файл Smarty core/smarty/plugins/modifier.date_format.php,<br />чтобы добавить поддержку русских месяцев и формата вывода &quot;23 ноября 2015&quot;.</p><p>Оригинал мы изменять не можем, для поддержки простого обновления дистрибутива Smarty внутри ReadyScript с официального сайта Smarty.</p><p>Но это и не нужно, потому что у нас уже есть плагин, нашего производства, который делает то, что вам нужно.<br />Он называется &quot;<strong>dateformat</strong>&quot; (без подчеркивания) располагается в папке /core/smarty/<strong>rsplugins</strong>/modifier.dateformat.php, он поддерживает весь набор стандартных инструкций обычного плагина date_format + дополнен конструкциями:<br /></p><ul><li><p><strong>%k</strong> - отображает сколько времени назад произошло событие &quot;сегодня&quot;,&quot;вчера&quot;, &quot;N дней назад&quot;, если больше месяца, то пишет дату &quot;23.02.2010&quot;.</p></li><li><p><strong>%v</strong> - отображает месяц на русском языке &quot;января&quot;, &quot;февраля&quot;,....</p></li><li><p><strong>@time</strong> - возвращает время в формате ЧЧ:ММ</p></li><li><p><strong>@date</strong> - возвращает дату в формате ДД.ММ.ГГГ</p></li><li><p><strong>@sec</strong> - возвращает кол-во секунд</p></li><li><p><strong>%datetime</strong> - возвращает дату и время в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС</p></li></ul><p><strong>Как этим пользоваться?</strong><br /></p><div class="codebox"><pre><code>{$date = &#039;2014-01-20 10:30:00&#039;}

//Нужно вывести дату в форме &quot;20 января 2014&quot;
{$date|dateformat:&quot;%d %v %Y&quot;}

//Нужно вывести дату в форме &quot;[Сегодня|Вчера|5 дней назад|20.01.2014], в 10:30&quot;.
{$date|dateformat:&quot;%k, в @time&quot;}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (admin)]]></author>
			<pubDate>Mon, 30 Mar 2015 14:19:46 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/1096/#p1096</guid>
		</item>
		<item>
			<title><![CDATA[Кракозябры в дате]]></title>
			<link>https://forum.readyscript.ru/post/1092/#p1092</link>
			<description><![CDATA[<p>При выводе даты создания новости с названиями месяцев появляются кракозябры.</p><p><span class="postimg"><img src="http://i65.fastpic.ru/big/2015/0330/e3/16862ed5a249b994887103235b87dce3.jpg" alt="http://i65.fastpic.ru/big/2015/0330/e3/16862ed5a249b994887103235b87dce3.jpg" /></span></p><br /><br /><p>и каждый раз при новом обновлении движка приходится вручную добавлять пару строк в файл ...\core\smarty\plugins\modifier.date_format.php для того, чтобы дата на русском языке отображалась правильно.</p><p><span class="postimg"><img src="http://i66.fastpic.ru/big/2015/0330/33/21bc40b742d25600c732b1140ff59433.jpg" alt="http://i66.fastpic.ru/big/2015/0330/33/21bc40b742d25600c732b1140ff59433.jpg" /></span></p><br /><p>Вот исходный modifier.date_format.php<br /></p><div class="codebox"><pre><code>&lt;?php
/**
 * Smarty plugin
 *
 * @package Smarty
 * @subpackage PluginsModifier
 */

/**
 * Smarty date_format modifier plugin
 *
 * Type:     modifier&lt;br&gt;
 * Name:     date_format&lt;br&gt;
 * Purpose:  format datestamps via strftime&lt;br&gt;
 * Input:&lt;br&gt;
 *          - string: input date string
 *          - format: strftime format for output
 *          - default_date: default date if $string is empty
 *
 * @link http://www.smarty.net/manual/en/language.modifier.date.format.php date_format (Smarty online manual)
 * @author Monte Ohrt &lt;monte at ohrt dot com&gt;
 * @param string $string       input date string
 * @param string $format       strftime format for output
 * @param string $default_date default date if $string is empty
 * @param string $formatter    either &#039;strftime&#039; or &#039;auto&#039;
 * @return string |void
 * @uses smarty_make_timestamp()
 */
function smarty_modifier_date_format($string, $format=null, $default_date=&#039;&#039;, $formatter=&#039;auto&#039;)
{
    if ($format === null) {
        $format = Smarty::$_DATE_FORMAT;
    }
    /**
    * Include the {@link shared.make_timestamp.php} plugin
    */
    require_once(SMARTY_PLUGINS_DIR . &#039;shared.make_timestamp.php&#039;);
    if ($string != &#039;&#039; &amp;&amp; $string != &#039;0000-00-00&#039; &amp;&amp; $string != &#039;0000-00-00 00:00:00&#039;) {
        $timestamp = smarty_make_timestamp($string);
    } elseif ($default_date != &#039;&#039;) {
        $timestamp = smarty_make_timestamp($default_date);
    } else {
        return;
    }
    
    if ($formatter==&#039;strftime&#039;||($formatter==&#039;auto&#039;&amp;&amp;strpos($format,&#039;%&#039;)!==false)) {
        if (DS == &#039;\\&#039;) {
            $_win_from = array(&#039;%D&#039;, &#039;%h&#039;, &#039;%n&#039;, &#039;%r&#039;, &#039;%R&#039;, &#039;%t&#039;, &#039;%T&#039;);
            $_win_to = array(&#039;%m/%d/%y&#039;, &#039;%b&#039;, &quot;\n&quot;, &#039;%I:%M:%S %p&#039;, &#039;%H:%M&#039;, &quot;\t&quot;, &#039;%H:%M:%S&#039;);
            if (strpos($format, &#039;%e&#039;) !== false) {
                $_win_from[] = &#039;%e&#039;;
                $_win_to[] = sprintf(&#039;%\&#039; 2d&#039;, date(&#039;j&#039;, $timestamp));
            }
            if (strpos($format, &#039;%l&#039;) !== false) {
                $_win_from[] = &#039;%l&#039;;
                $_win_to[] = sprintf(&#039;%\&#039; 2d&#039;, date(&#039;h&#039;, $timestamp));
            }
            $format = str_replace($_win_from, $_win_to, $format);
        }

        return strftime($format, $timestamp);
    } else {
        return date($format, $timestamp);
    }
}</code></pre></div><p>А вот измененный с поддержкой названия месяцев по русски:</p><div class="codebox"><pre><code>&lt;?php
/**
 * Smarty plugin
 *
 * @package Smarty
 * @subpackage PluginsModifier
 */

/**
 * Smarty date_format modifier plugin
 *
 * Type:     modifier&lt;br&gt;
 * Name:     date_format&lt;br&gt;
 * Purpose:  format datestamps via strftime&lt;br&gt;
 * Input:&lt;br&gt;
 *          - string: input date string
 *          - format: strftime format for output
 *          - default_date: default date if $string is empty
 *
 * @link http://www.smarty.net/manual/en/language.modifier.date.format.php date_format (Smarty online manual)
 * @author Monte Ohrt &lt;monte at ohrt dot com&gt;
 * @param string $string       input date string
 * @param string $format       strftime format for output
 * @param string $default_date default date if $string is empty
 * @param string $formatter    either &#039;strftime&#039; or &#039;auto&#039;
 * @return string |void
 * @uses smarty_make_timestamp()
 */
function smarty_modifier_date_format($string, $format=null, $default_date=&#039;&#039;, $formatter=&#039;auto&#039;)
{
    if ($format === null) {
        $format = Smarty::$_DATE_FORMAT;
    }
    /**
    * Include the {@link shared.make_timestamp.php} plugin
    */
    require_once(SMARTY_PLUGINS_DIR . &#039;shared.make_timestamp.php&#039;);
    if ($string != &#039;&#039; &amp;&amp; $string != &#039;0000-00-00&#039; &amp;&amp; $string != &#039;0000-00-00 00:00:00&#039;) {
        $timestamp = smarty_make_timestamp($string);
    } elseif ($default_date != &#039;&#039;) {
        $timestamp = smarty_make_timestamp($default_date);
    } else {
        return;
    }

 if($formatter==&#039;rus&#039;)
    {
        $months = array (
            1 =&gt; &#039;января&#039;,
            2 =&gt; &#039;февраля&#039;,
            3 =&gt; &#039;марта&#039;,
            4 =&gt; &#039;апреля&#039;,
            5 =&gt; &#039;мая&#039;,
            6 =&gt; &#039;июня&#039;,
            7 =&gt; &#039;июля&#039;,
            8 =&gt; &#039;августа&#039;,
            9 =&gt; &#039;сентября&#039;,
           10 =&gt; &#039;октября&#039;,
           11 =&gt; &#039;ноября&#039;,
           12 =&gt; &#039;декабря&#039;);
        
        $format = str_replace(&quot;%m&quot;,$months[(int)date(&#039;m&#039;,$timestamp)],$format);
        $formatter=&#039;auto&#039;;
    }
    
    if ($formatter==&#039;strftime&#039;||($formatter==&#039;auto&#039;&amp;&amp;strpos($format,&#039;%&#039;)!==false)) {
        if (DS == &#039;\\&#039;) {
            $_win_from = array(&#039;%D&#039;, &#039;%h&#039;, &#039;%n&#039;, &#039;%r&#039;, &#039;%R&#039;, &#039;%t&#039;, &#039;%T&#039;);
            $_win_to = array(&#039;%m/%d/%y&#039;, &#039;%b&#039;, &quot;\n&quot;, &#039;%I:%M:%S %p&#039;, &#039;%H:%M&#039;, &quot;\t&quot;, &#039;%H:%M:%S&#039;);
            if (strpos($format, &#039;%e&#039;) !== false) {
                $_win_from[] = &#039;%e&#039;;
                $_win_to[] = sprintf(&#039;%\&#039; 2d&#039;, date(&#039;j&#039;, $timestamp));
            }
            if (strpos($format, &#039;%l&#039;) !== false) {
                $_win_from[] = &#039;%l&#039;;
                $_win_to[] = sprintf(&#039;%\&#039; 2d&#039;, date(&#039;h&#039;, $timestamp));
            }
            $format = str_replace($_win_from, $_win_to, $format);
        }

        return strftime($format, $timestamp);
    } else {
        return date($format, $timestamp);
    }
}</code></pre></div><p>Можно внести изменения в исходный файл на постоянной основе?</p>]]></description>
			<author><![CDATA[null@example.com (Sergey T.)]]></author>
			<pubDate>Mon, 30 Mar 2015 06:26:09 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/1092/#p1092</guid>
		</item>
	</channel>
</rss>
