给定时间戳,如何按天/周/月显示timeago

时间:2012-06-14 02:27:16

标签: javascript jquery

我正在寻找一种方法来显示基于db的iso时间戳的输出,如:2008-07-17T09:24:17Z

输出应该是:

  • 今天使用
  • 周二使用
  • 上周二使用
  • 一个多月前使用

使用jQuery timeago插件获得的简单且更静态的内容:http://timeago.yarp.com/

有什么建议吗?感谢

1 个答案:

答案 0 :(得分:0)

您可以将时间戳转换为日期对象,并将其与本地(或其他)日期对象进行比较。然后根据差异对响应进行分类:

// Expects ISO8601 long format, no decimals of seconds
function localDateFromUTC(s) {

  var x = s.split(/[-\s:tz]/i);
  var d = Date.UTC(x[0], x[1], x[2], x[3], x[4], x[5], 0);
  return new Date(d);
}

function aboutTime(s) {

  var r = Math.round;
  var now = new Date();
  var then = localDateFromUTC(s);
  var diff = r((now - then)/1000); // Convert to seconds

  if (diff < 10) return 'a few seconds ago';
  if (diff < 50) return 'less than a minute ago';
  if (diff < 70) return 'about a minute ago';
  if (diff < 35000) return 'about ' + r(diff/60) + ' minutes ago';
  if (diff < 8.64e4) return 'about ' + r(diff/3600) + ' hours ago';
  if (diff < 6.048e5) return 'about ' + r(diff/8.64e4) + ' days ago';
  // and so on
  return 'about ' + r(diff/6.048e5) + ' weeks ago';

}

alert(aboutTime('2008-07-17T09:24:17Z')); // about 200 weeks ago

关于如何将数字转换为“约”字符串(例如,具有与“约”次数相关的属性的对象,然后将数字转换为属性名称),您可以更加聪明。