datalife engine:显示更友好的日期

很多次我被问到“如何在for-dle.ru上制作日期输出?”
在这里,特别是对你我传播这个脚本。
Hack,更改输出日期类型07.10.2018的单词。即“日,返回/一个月前”等。
我必须说这篇文章是在互联网上,如果你搜索,你可以找到它。

安装
打开连接到模板的任何js文件,并在最底部添加:

(<span class="function"><span class="keyword">function</span> <span class="params">(factory)</span> {</span>
  <span class="keyword">if</span> (<span class="keyword">typeof</span> define === <span class="string">'function'</span> && define.amd) {
    <span class="comment">// AMD. Register as an anonymous module.</span>
    define([<span class="string">'../../../engine/classes/js/jquery'</span>], factory);
  } <span class="keyword">else</span> {
    <span class="comment">// Browser globals</span>
    factory(jQuery);
  }
}(<span class="function"><span class="keyword">function</span> <span class="params">($)</span> {</span>
  $.timeago = <span class="function"><span class="keyword">function</span><span class="params">(timestamp)</span> {</span>
    <span class="keyword">if</span> (timestamp <span class="keyword">instanceof</span> Date) {
      <span class="keyword">return</span> inWords(timestamp);
    } <span class="keyword">else</span> <span class="keyword">if</span> (<span class="keyword">typeof</span> timestamp === <span class="string">"string"</span>) {
      <span class="keyword">return</span> inWords($.timeago.parse(timestamp));
    } <span class="keyword">else</span> <span class="keyword">if</span> (<span class="keyword">typeof</span> timestamp === <span class="string">"number"</span>) {
      <span class="keyword">return</span> inWords(<span class="keyword">new</span> Date(timestamp));
    } <span class="keyword">else</span> {
      <span class="keyword">return</span> inWords($.timeago.datetime(timestamp));
    }
  };
  <span class="keyword">var</span> $t = $.timeago;
  $.extend($.timeago, {
    settings: {
      refreshMillis: <span class="number">60000</span>,
      allowFuture: <span class="literal">false</span>,
      localeTitle: <span class="literal">false</span>,
      strings: {
        prefixAgo: <span class="literal">null</span>,
        prefixFromNow: <span class="literal">null</span>,
        suffixAgo: <span class="string">"ago"</span>,
        suffixFromNow: <span class="string">"from now"</span>,
        seconds: <span class="string">"less than a minute"</span>,
        minute: <span class="string">"about a minute"</span>,
        minutes: <span class="string">"%d minutes"</span>,
        hour: <span class="string">"about an hour"</span>,
        hours: <span class="string">"about %d hours"</span>,
        day: <span class="string">"a day"</span>,
        days: <span class="string">"%d days"</span>,
        month: <span class="string">"about a month"</span>,
        months: <span class="string">"%d months"</span>,
        year: <span class="string">"about a year"</span>,
        years: <span class="string">"%d years"</span>,
        wordSeparator: <span class="string">" "</span>,
        numbers: []
      }
    },
    inWords: <span class="function"><span class="keyword">function</span><span class="params">(distanceMillis)</span> {</span>
      <span class="keyword">var</span> $l = <span class="keyword">this</span>.settings.strings;
      <span class="keyword">var</span> prefix = $l.prefixAgo;
      <span class="keyword">var</span> suffix = $l.suffixAgo;
      <span class="keyword">if</span> (<span class="keyword">this</span>.settings.allowFuture) {
        <span class="keyword">if</span> (distanceMillis < <span class="number">0</span>) {
          prefix = $l.prefixFromNow;
          suffix = $l.suffixFromNow;
        }
      }
      <span class="keyword">var</span> seconds = Math.abs(distanceMillis) / <span class="number">1000</span>;
      <span class="keyword">var</span> minutes = seconds / <span class="number">60</span>;
      <span class="keyword">var</span> hours = minutes / <span class="number">60</span>;
      <span class="keyword">var</span> days = hours / <span class="number">24</span>;
      <span class="keyword">var</span> years = days / <span class="number">365</span>;
      <span class="function"><span class="keyword">function</span> <span class="title">substitute</span><span class="params">(stringOrFunction, number)</span> {</span>
        <span class="keyword">var</span> string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
        <span class="keyword">var</span> value = ($l.numbers && $l.numbers[number]) || number;
        <span class="keyword">return</span> string.replace(<span class="regexp">/%d/i</span>, value);
      }
      <span class="keyword">var</span> words = seconds < <span class="number">45</span> && substitute($l.seconds, Math.round(seconds)) ||
        seconds < <span class="number">90</span> && substitute($l.minute, <span class="number">1</span>) ||
        minutes < <span class="number">45</span> && substitute($l.minutes, Math.round(minutes)) ||
        minutes < <span class="number">90</span> && substitute($l.hour, <span class="number">1</span>) ||
        hours < <span class="number">24</span> && substitute($l.hours, Math.round(hours)) ||
        hours < <span class="number">42</span> && substitute($l.day, <span class="number">1</span>) ||
        days < <span class="number">30</span> && substitute($l.days, Math.round(days)) ||
        days < <span class="number">45</span> && substitute($l.month, <span class="number">1</span>) ||
        days < <span class="number">365</span> && substitute($l.months, Math.round(days / <span class="number">30</span>)) ||
        years < <span class="number">1.5</span> && substitute($l.year, <span class="number">1</span>) ||
        substitute($l.years, Math.round(years));
      <span class="keyword">var</span> separator = $l.wordSeparator || <span class="string">""</span>;
      <span class="keyword">if</span> ($l.wordSeparator === undefined) { separator = <span class="string">" "</span>; }
      <span class="keyword">return</span> $.trim([prefix, words, suffix].join(separator));
    },
    parse: <span class="function"><span class="keyword">function</span><span class="params">(iso8601)</span> {</span>
      <span class="keyword">var</span> s = $.trim(iso8601);
      s = s.replace(<span class="regexp">/\.\d+/</span>,<span class="string">""</span>); <span class="comment">// remove milliseconds</span>
      s = s.replace(<span class="regexp">/-/</span>,<span class="string">"/"</span>).replace(<span class="regexp">/-/</span>,<span class="string">"/"</span>);
      s = s.replace(<span class="regexp">/T/</span>,<span class="string">" "</span>).replace(<span class="regexp">/Z/</span>,<span class="string">" UTC"</span>);
      s = s.replace(<span class="regexp">/([\+\-]\d\d)\:?(\d\d)/</span>,<span class="string">" $1$2"</span>); <span class="comment">// -04:00 -> -0400</span>
      <span class="keyword">return</span> <span class="keyword">new</span> Date(s);
    },
    datetime: <span class="function"><span class="keyword">function</span><span class="params">(elem)</span> {</span>
      <span class="keyword">var</span> iso8601 = $t.isTime(elem) ? $(elem).attr(<span class="string">"datetime"</span>) : $(elem).attr(<span class="string">"title"</span>);
      <span class="keyword">return</span> $t.parse(iso8601);
    },
    isTime: <span class="function"><span class="keyword">function</span><span class="params">(elem)</span> {</span>
      <span class="comment">// jQuery's `is()` doesn't play well with HTML5 in IE</span>
      <span class="keyword">return</span> $(elem).get(<span class="number">0</span>).tagName.toLowerCase() === <span class="string">"time"</span>; <span class="comment">// $(elem).is("time");</span>
    }
  });
  <span class="comment">// functions that can be called via $(el).timeago('action')</span>
  <span class="comment">// init is default when no action is given</span>
  <span class="comment">// functions are called with context of a single element</span>
  <span class="keyword">var</span> functions = {
    init: <span class="function"><span class="keyword">function</span><span class="params">()</span>{</span>
      <span class="keyword">var</span> refresh_el = $.proxy(refresh, <span class="keyword">this</span>);
      refresh_el();
      <span class="keyword">var</span> $s = $t.settings;
      <span class="keyword">if</span> ($s.refreshMillis > <span class="number">0</span>) {
        setInterval(refresh_el, $s.refreshMillis);
      }
    },
    update: <span class="function"><span class="keyword">function</span><span class="params">(time)</span>{</span>
      $(<span class="keyword">this</span>).data(<span class="string">'timeago'</span>, { datetime: $t.parse(time) });
      refresh.apply(<span class="keyword">this</span>);
    }
  };
  $.fn.timeago = <span class="function"><span class="keyword">function</span><span class="params">(action, options)</span> {</span>
    <span class="keyword">var</span> fn = action ? functions[action] : functions.init;
    <span class="keyword">if</span>(!fn){
      <span class="keyword">throw</span> <span class="keyword">new</span> Error(<span class="string">"Unknown function name '"</span>+ action +<span class="string">"' for timeago"</span>);
    }
    <span class="comment">// each over objects here and call the requested function</span>
    <span class="keyword">this</span>.each(<span class="function"><span class="keyword">function</span><span class="params">()</span>{</span>
      fn.call(<span class="keyword">this</span>, options);
    });
    <span class="keyword">return</span> <span class="keyword">this</span>;
  };
  <span class="function"><span class="keyword">function</span> <span class="title">refresh</span><span class="params">()</span> {</span>
    <span class="keyword">var</span> data = prepareData(<span class="keyword">this</span>);
    <span class="keyword">if</span> (!isNaN(data.datetime)) {
      $(<span class="keyword">this</span>).text(inWords(data.datetime));
    }
    <span class="keyword">return</span> <span class="keyword">this</span>;
  }
  <span class="function"><span class="keyword">function</span> <span class="title">prepareData</span><span class="params">(element)</span> {</span>
    element = $(element);
    <span class="keyword">if</span> (!element.data(<span class="string">"timeago"</span>)) {
      element.data(<span class="string">"timeago"</span>, { datetime: $t.datetime(element) });
      <span class="keyword">var</span> text = $.trim(element.text());
      <span class="keyword">if</span> ($t.settings.localeTitle) {
        element.attr(<span class="string">"title"</span>, element.data(<span class="string">'timeago'</span>).datetime.toLocaleString());
      } <span class="keyword">else</span> <span class="keyword">if</span> (text.length > <span class="number">0</span> && !($t.isTime(element) && element.attr(<span class="string">"title"</span>))) {
        element.attr(<span class="string">"title"</span>, text);
      }
    }
    <span class="keyword">return</span> element.data(<span class="string">"timeago"</span>);
  }
  <span class="function"><span class="keyword">function</span> <span class="title">inWords</span><span class="params">(date)</span> {</span>
    <span class="keyword">return</span> $t.inWords(distance(date));
  }
  <span class="function"><span class="keyword">function</span> <span class="title">distance</span><span class="params">(date)</span> {</span>
    <span class="keyword">return</span> (<span class="keyword">new</span> Date().getTime() - date.getTime());
  }
  <span class="comment">// fix for IE6 suckage</span>
  document.createElement(<span class="string">"abbr"</span>);
  document.createElement(<span class="string">"time"</span>);
}));
<span class="comment">// Russian</span>
(<span class="function"><span class="keyword">function</span><span class="params">()</span> {</span>
  <span class="function"><span class="keyword">function</span> <span class="title">numpf</span><span class="params">(n, f, s, t)</span> {</span>
    <span class="comment">// f - 1, 21, 31, ...</span>
    <span class="comment">// s - 2-4, 22-24, 32-34 ...</span>
    <span class="comment">// t - 5-20, 25-30, ...</span>
    <span class="keyword">var</span> n10 = n % <span class="number">10</span>;
    <span class="keyword">if</span> ( (n10 == <span class="number">1</span>) && ( (n == <span class="number">1</span>) || (n > <span class="number">20</span>) ) ) {
      <span class="keyword">return</span> f;
    } <span class="keyword">else</span> <span class="keyword">if</span> ( (n10 > <span class="number">1</span>) && (n10 < <span class="number">5</span>) && ( (n > <span class="number">20</span>) || (n < <span class="number">10</span>) ) ) {
      <span class="keyword">return</span> s;
    } <span class="keyword">else</span> {
      <span class="keyword">return</span> t;
    }
  }
  jQuery.timeago.settings.strings = {
    prefixAgo: <span class="literal">null</span>,
    prefixFromNow: <span class="string">"через"</span>,
    suffixAgo: <span class="string">"назад"</span>,
    suffixFromNow: <span class="literal">null</span>,
    seconds: <span class="string">"меньше минуты"</span>,
    minute: <span class="string">"минуту"</span>,
    minutes: <span class="function"><span class="keyword">function</span><span class="params">(value)</span> {</span> <span class="keyword">return</span> numpf(value, <span class="string">"%d минута"</span>, <span class="string">"%d минуты"</span>, <span class="string">"%d минут"</span>); },
    hour: <span class="string">"час"</span>,
    hours: <span class="function"><span class="keyword">function</span><span class="params">(value)</span> {</span> <span class="keyword">return</span> numpf(value, <span class="string">"%d час"</span>, <span class="string">"%d часа"</span>, <span class="string">"%d часов"</span>); },
    day: <span class="string">"день"</span>,
    days: <span class="function"><span class="keyword">function</span><span class="params">(value)</span> {</span> <span class="keyword">return</span> numpf(value, <span class="string">"%d день"</span>, <span class="string">"%d дня"</span>, <span class="string">"%d дней"</span>); },
    month: <span class="string">"месяц"</span>,
    months: <span class="function"><span class="keyword">function</span><span class="params">(value)</span> {</span> <span class="keyword">return</span> numpf(value, <span class="string">"%d месяц"</span>, <span class="string">"%d месяца"</span>, <span class="string">"%d месяцев"</span>); },
    year: <span class="string">"год"</span>,
    years: <span class="function"><span class="keyword">function</span><span class="params">(value)</span> {</span> <span class="keyword">return</span> numpf(value, <span class="string">"%d год"</span>, <span class="string">"%d года"</span>, <span class="string">"%d лет"</span>); }
  };
})();
 
    $(<span class="string">"time.ago"</span>).timeago();

现在,无论我们想要将{date}格式的日期更改为单词,请打开例如shortstory.tpl并将{date}替换为:

<span class="tag"><<span class="title">time</span> <span class="attribute">datetime</span>=<span class="value">"{date=Y-m-d}T{date=H:i:s}"</span> <span class="attribute">class</span>=<span class="value">"ago"</span>></span>{date=Y-m-d}<span class="tag"></<span class="title">time</span>></span>
订阅评论
提醒
guest的头像

0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x