【问题标题】:Display real time years, months, weeks and days between 2 days in JavaScript在 JavaScript 中显示 2 天之间的实时年、月、周和天
【发布时间】:2010-05-29 15:06:48
【问题描述】:

这是我编写的代码,它似乎可以工作。

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 对象了。

这是最好的方法吗?

【问题讨论】:

    标签: javascript date


    【解决方案1】:

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

    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/ 这有点酷

    【讨论】:

    • 啊,是的,我考虑到它不是 100% 准确的。此外,看起来像一个很酷的插件,但我将它包含在一个没有 jQuery 的项目中。感谢您的回答 +1
    • 谢谢!您的回答帮助我创建了 secondsToString() 函数:stackoverflow.com/a/9220897/142225
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 2019-01-02
      • 1970-01-01
      • 2016-01-05
      相关资源
      最近更新 更多