博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
****timeago.js插件:jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例...
阅读量:6553 次
发布时间:2019-06-24

本文共 8876 字,大约阅读时间需要 29 分钟。

 

 

关键词 :

时间格式化 刚刚 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(/([\+\-]\d\d)\:?(\d\d)/, " $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(/([\+\-]\d\d)\:?(\d\d)/," $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");
}));
如何联系我:【万里虎】www.bravetiger.cn 【QQ】3396726884 (咨询问题100元起,帮助解决问题500元起) 【博客】http://www.cnblogs.com/kenshinobiy/
你可能感兴趣的文章
c++ 类的继承与派生
查看>>
[转] Sublime Text3 配置 NodeJs 环境
查看>>
【leetcode】449. Serialize and Deserialize BST
查看>>
HTTP-web服务器接收到client请求后的处理过程(很详细)
查看>>
Mobile开发之meta篇
查看>>
Flutter-BLoC-第二讲
查看>>
C# DataSet数据导入Excel 修正版- .net FrameWork 4.0以上
查看>>
NSBundle
查看>>
Linux kernel memory-faq.txt
查看>>
java 企业 网站源码 后台 springmvc SSM 前台 静态化 代码生成器
查看>>
[Delphi] FMXUI - ListView用法简介
查看>>
再不做题就老了,这个假期就这么地了
查看>>
oracle中的三种异常情况
查看>>
6.18 学习记录
查看>>
centos6.7下网络设置
查看>>
[Android四大组件之二]——Service
查看>>
趋中法则
查看>>
一首《人道》,献给正在辛苦加班的程序员朋友们
查看>>
记录关于使用ADO.NET 连接池连接Oracle时Session信息不更新的坑
查看>>
nodejs windows下安装运行
查看>>