源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2022-01-24 11:13 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
要实现类似功能,用JS就可以,实现方法如下: 一、javascript函数实现: 实例1:
[u]复制代码[/u] 代码如下:
//JavaScript函数: var minute = 1000 * 60; var hour = minute * 60; var day = hour * 24; var halfamonth = day * 15; var month = day * 30; function getDateDiff(dateTimeStamp){ var now = new Date().getTime(); var diffValue = now - dateTimeStamp; if(diffValue < 0){  //若日期不符则弹出窗口告之  //alert("结束日期不能小于开始日期!");  } var monthC =diffValue/month; var weekC =diffValue/(7*day); var dayC =diffValue/day; var hourC =diffValue/hour; var minC =diffValue/minute; if(monthC>=1){  result="发表于" + parseInt(monthC) + "个月前";  }  else if(weekC>=1){  result="发表于" + parseInt(weekC) + "周前";  }  else if(dayC>=1){  result="发表于"+ parseInt(dayC) +"天前";  }  else if(hourC>=1){  result="发表于"+ parseInt(hourC) +"个小时前";  }  else if(minC>=1){  result="发表于"+ parseInt(minC) +"分钟前";  }else  result="刚刚发表"; return result; }
若你得到的时间格式不是时间戳,可以使用下面的JavaScript函数把字符串转换为时间戳, 本函数的功能相当于JS版的strtotime:
[u]复制代码[/u] 代码如下:
//js函数代码:字符串转换为时间戳 function getDateTimeStamp(dateStr){  return Date.parse(dateStr.replace(/-/gi,"/")); }
实例2:
[u]复制代码[/u] 代码如下:
<script>       function jsDateDiff(publishTime){           var d_minutes,d_hours,d_days;           var timeNow = parseInt(new Date().getTime()/1000);           var d;           d = timeNow - publishTime;           d_days = parseInt(d/86400);           d_hours = parseInt(d/3600);           d_minutes = parseInt(d/60);           if(d_days>0 && d_days<4){               return d_days+"天前";           }else if(d_days<=0 && d_hours>0){               return d_hours+"小时前";           }else if(d_hours<=0 && d_minutes>0){               return d_minutes+"分钟前";           }else{               var s = new Date(publishTime*1000);               // s.getFullYear()+"年";         return (s.getMonth()+1)+"月"+s.getDate()+"日";           }       }       </script>
二、jquery插件实现 HTML代码:
[u]复制代码[/u] 代码如下:
<span class="time timeago" title="<fmt:formatDate value="${comment.createAt}" pattern="yyyy-MM-dd HH:mm:ss"/>"></span>
调用代码:
[u]复制代码[/u] 代码如下:
jQuery("span.timeago").timeago();
插件源码:
[u]复制代码[/u] 代码如下:
(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"); }));
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部