Отображение в реальном времени лет, месяцев, недель и дней между 2 днями в JavaScript - PullRequest
2 голосов
/ 29 мая 2010

Это то, что я кодировал, и похоже, что оно работает.

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 ]

4 голосов
/ 29 мая 2010

Вы можете поместить эти константы в массив, а затем просто перебрать его:

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/ это круто

0 голосов
/ 29 мая 2010

Вам не нужно устанавливать какие-либо константы, но если вам нужны все эти числа (годы, месяцы, дни, часы и т. Д.), Я не знаю другого способа, как это можно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...