• ****timeago.js插件:jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例


    前端 时间个性化 插件 jquery.timeago.js

    关键词 :

    时间格式化 刚刚 N分钟前 N小时前 N天前 N月前 N年前 

    MM-dd hh:mm  或者  yyyy-MM-dd

    前端: 

    <span class="time" title="2016-07-23 12:02:32"></span>

      

    用法:

     $(".time").timeago();

    插件: jquery.timeago.js

    复制代码
    !function (t) {
        function e(e) {
            var n = t.extend(o.settings, e)
              , s = t.proxy(r, this);
            s(),
            n.refreshMillis > 0 && setInterval(s, n.refreshMillis)
        }
        function r() {
            var e = n(this)
              , r = e.datetime;
            return isNaN(r) || t(this).text(o.inWords(r)),
            this
        }
        function n(e) {
            return e = t(e),
            e.data("timeago") || e.data("timeago", {
                datetime: o.datetime(e)
            }),
            e.data("timeago")
        }
        function s(t) {
            return (new Date).getTime() - t.getTime()
        }
        function i(t) {
            var e = new Date;
            return e.getMonth() > t.getMonth() || e.getDate() > t.getDate()
        }
        function a(t) {
            return (new Date).getFullYear() > t.getFullYear()
        }
        Date.prototype.format = function (t) {
            var e = {
                "M+": this.getMonth() + 1,
                "d+": this.getDate(),
                "h+": this.getHours(),
                "m+": this.getMinutes(),
                "s+": this.getSeconds(),
                "q+": Math.floor((this.getMonth() + 3) / 3),
                S: this.getMilliseconds()
            };
            /(y+)/.test(t) && (t = t.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)));
            for (var r in e)
                new RegExp("(" + r + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? e[r] : ("00" + e[r]).substr(("" + e[r]).length)));
            return t
        }
        ;
        var o = {
            settings: {
                refreshMillis: 6e4,
                relative: !0,
                strings: {
                    suffixAgo: "前",
                    seconds: "刚刚",
                    minute: "1分钟",
                    minutes: "%d分钟",
                    hour: "1小时",
                    hours: "%d小时",
                    days: "%d天",
                    months: "%d月",
                    years: "%d年",
                    numbers: []
                },
                yearsAgoFormat: "yyyy-MM-dd",
                daysAgoFormat: "MM-dd hh:mm"
            },
            inWords: function (e) {
                function r(e, r) {
                    var n = t.isFunction(e) ? e(r, u) : e
                      , s = g.numbers && g.numbers[r] || r;
                    return n.replace(/%d/i, s)
                }
                var n = o.settings.relative;
                if (!n && a(e))
                    return e.format(this.settings.yearsAgoFormat);
                if (!n && i(e))
                    return e.format(this.settings.daysAgoFormat);
                var u = s(e)
                  , g = this.settings.strings
                  , h = g.suffixAgo
                  , d = Math.abs(u) / 1e3
                  , l = d / 60
                  , f = l / 60
                  , m = f / 24
                  , c = m / 30
                  , M = m / 365;
                return words = 60 > d ? r(g.seconds, Math.floor(d)) : 60 > l ? r(g.minutes, Math.floor(l)) : 24 > f ? r(g.hours, Math.floor(f)) : 30 > m ? r(g.days, Math.floor(m)) : 365 > m ? r(g.months, Math.floor(c)) : r(g.years, Math.floor(M)),
                "刚刚" == words ? words : words + h
            },
            parse: function (e) {
                var r = t.trim(e);
                return r = r.replace(/.d+/, ""),
                r = r.replace(/-/, "/").replace(/-/, "/"),
                r = r.replace(/T/, " ").replace(/Z/, " UTC"),
                r = r.replace(/([+-]dd):?(dd)/, " $1$2"),
                new Date(r)
            },
            datetime: function (e) {
                var r = t(e).attr(o.isTime(e) ? "datetime" : "title");
                return o.parse(r)
            },
            isTime: function (e) {
                return "time" === t(e).get(0).tagName.toLowerCase()
            }
        };
        t.fn.timeago = function (t) {
            return this.each(function () {
                e.call(this, t)
            }),
            this
        }
    }(window.jQuery)

    jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例

    转:http://www.jb51.net/article/48912.htm

    jquery插件实现

    HTML代码:

    复制代码代码如下:

    <span class="time timeago" title="<fmt:formatDate value="${comment.createAt}" pattern="yyyy-MM-dd HH:mm:ss"/>"></span>

    调用代码:

    复制代码代码如下:

    jQuery("span.timeago").timeago();

    插件源码:

    复制代码代码如下:

    (function (factory) {
      if (typeof define === 'function' && define.amd) {
        // AMD. Register as an anonymous module.
        define(['jquery'], factory);
      } else {
        // Browser globals
        factory(jQuery);
      }
    }(function ($) {
      $.timeago = function(timestamp) {
        if (timestamp instanceof Date) {
          return inWords(timestamp);
        } else if (typeof timestamp === "string") {
          return inWords($.timeago.parse(timestamp));
        } else if (typeof timestamp === "number") {
          return inWords(new Date(timestamp));
        } else {
          return inWords($.timeago.datetime(timestamp));
        }
      };
      var $t = $.timeago;

      $.extend($.timeago, {
        settings: {
          refreshMillis: 60000,
          allowFuture: false,
          localeTitle: false,
          cutoff: 0,
          strings: {
            prefixAgo: null,
            prefixFromNow: null,
            suffixAgo: "前",
            suffixFromNow: "from now",
            seconds: "1分钟",
            minute: "1分钟",
            minutes: "%d分钟",
            hour: "1小时",
            hours: "%d小时",
            day: "1天",
            days: "%d天",
            month: "1月",
            months: "%d月",
            year: "1年",
            years: "%d年",
            wordSeparator: "",
            numbers: []
          }
        },
        inWords: function(distanceMillis) {
          var $l = this.settings.strings;
          var prefix = $l.prefixAgo;
          var suffix = $l.suffixAgo;
          if (this.settings.allowFuture) {
            if (distanceMillis < 0) {
              prefix = $l.prefixFromNow;
              suffix = $l.suffixFromNow;
            }
          }

          var seconds = Math.abs(distanceMillis) / 1000;
          var minutes = seconds / 60;
          var hours = minutes / 60;
          var days = hours / 24;
          var years = days / 365;

          function substitute(stringOrFunction, number) {
            var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
            var value = ($l.numbers && $l.numbers[number]) || number;
            return string.replace(/%d/i, value);
          }

          var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
            seconds < 90 && substitute($l.minute, 1) ||
            minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
            minutes < 90 && substitute($l.hour, 1) ||
            hours < 24 && substitute($l.hours, Math.round(hours)) ||
            hours < 42 && substitute($l.day, 1) ||
            days < 30 && substitute($l.days, Math.round(days)) ||
            days < 45 && substitute($l.month, 1) ||
            days < 365 && substitute($l.months, Math.round(days / 30)) ||
            years < 1.5 && substitute($l.year, 1) ||
            substitute($l.years, Math.round(years));

          var separator = $l.wordSeparator || "";
          if ($l.wordSeparator === undefined) { separator = " "; }
          return $.trim([prefix, words, suffix].join(separator));
        },
        parse: function(iso8601) {
          var s = $.trim(iso8601);
          s = s.replace(/.d+/,""); // remove milliseconds
          s = s.replace(/-/,"/").replace(/-/,"/");
          s = s.replace(/T/," ").replace(/Z/," UTC");
          s = s.replace(/([+-]dd):?(dd)/," $1$2"); // -04:00 -> -0400
          return new Date(s);
        },
        datetime: function(elem) {
          var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
          return $t.parse(iso8601);
        },
        isTime: function(elem) {
          // jQuery's `is()` doesn't play well with HTML5 in IE
          return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
        }
      });

      // functions that can be called via $(el).timeago('action')
      // init is default when no action is given
      // functions are called with context of a single element
      var functions = {
        init: function(){
          var refresh_el = $.proxy(refresh, this);
          refresh_el();
          var $s = $t.settings;
          if ($s.refreshMillis > 0) {
            setInterval(refresh_el, $s.refreshMillis);
          }
        },
        update: function(time){
          $(this).data('timeago', { datetime: $t.parse(time) });
          refresh.apply(this);
        },
        updateFromDOM: function(){
          $(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) });
          refresh.apply(this);
        }
      };

      $.fn.timeago = function(action, options) {
        var fn = action ? functions[action] : functions.init;
        if(!fn){
          throw new Error("Unknown function name '"+ action +"' for timeago");
        }
        // each over objects here and call the requested function
        this.each(function(){
          fn.call(this, options);
        });
        return this;
      };

      function refresh() {
        var data = prepareData(this);
        var $s = $t.settings;

        if (!isNaN(data.datetime)) {
          if ( $s.cutoff == 0 || distance(data.datetime) < $s.cutoff) {
            $(this).text(inWords(data.datetime));
          }
        }
        return this;
      }

      function prepareData(element) {
        element = $(element);
        if (!element.data("timeago")) {
          element.data("timeago", { datetime: $t.datetime(element) });
          var text = $.trim(element.text());
          if ($t.settings.localeTitle) {
            element.attr("title", element.data('timeago').datetime.toLocaleString());
          } else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
            element.attr("title", text);
          }
        }
        return element.data("timeago");
      }

      function inWords(date) {
        return $t.inWords(distance(date));
      }

      function distance(date) {
        return (new Date().getTime() - date.getTime());
      }

      // fix for IE6 suckage
      document.createElement("abbr");
      document.createElement("time");
    }));
  • 相关阅读:
    linux 还能这么来
    JS还能这么来
    FFmpeg常用命令
    golang gin框架默认打印日志写入到文件 (http请求打印写入到文件而不是控制台)
    社保、新农合介绍以及报销比例介绍
    Lightroom 快捷键集合
    golang map基础使用-初始化
    SOLID
    java dump
    Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
  • 原文地址:https://www.cnblogs.com/kenshinobiy/p/7784561.html
Copyright © 2020-2023  润新知