在JavaScript中显示2天之间的实时年,月,周和日

时间:2010-05-29 15:06:48

标签: javascript date

这就是我编写的内容,它似乎有效。

window.onload = function() {
   var currentSpan = document.getElementById('current');

   var minute = 60000,
       hour = minute * 60,
       day = hour * 24,
       week = day * 7,
       month = week * 4,
       year = day * 365;
       var start = new Date(2009, 6, 1);

   setInterval(function() {

       var now = new Date();



       var difference = now - start;


       var years = Math.floor(difference / year),
           months = Math.floor((difference - (years * year)) / month),
           weeks = Math.floor((difference - (months * month + years * year)) / week),
           days = Math.floor((difference - (weeks * week + months * month + years * year)) / day);



   currentSpan.innerHTML = 'Since has passed: ' + years + ' years, ' + months + ' months, ' + weeks + ' weeks and ' + days + ' days';

   }, 500);

};

这似乎更新了我的范围,所有数字看起来正确。

然而,代码看起来很难看。我是否真的需要设置这样的人造常数,然后用所有数学来计算我想要的东西?

自从我使用Date对象以来已经有一段时间了。

这是最好的方法吗?

2 个答案:

答案 0 :(得分:4)

您可以将这些常量放在一个数组中,然后迭代它:

function tdiff(utc) {
  var diff = new Date() - new Date(utc);
  var units = [
    1000 * 60 * 60 * 24 * 365,
    1000 * 60 * 60 * 24 * 28,
    1000 * 60 * 60 * 24 * 7,
    1000 * 60 * 60 * 24,
    1000 * 60 * 60,
    1000 * 60,
    1000
  ];

  var rv = [];
  for (var i = 0; i < units.length; ++i) {
    rv.push(Math.floor(diff / units[i]));
    diff = diff % units[i];
  }
  return rv;
}

当然,因为几个月和几年的长度并不总是相同,所以这并不是那么准确,但我想你会意识到: - )

另见:http://timeago.yarp.com/这很酷

答案 1 :(得分:0)

您不必设置任何常量,但如果您需要所有这些数字(年,月,日,小时等),我不知道有任何其他方法可以完成。