Рассчитать количество недель, дней и часов из миллисекунд - PullRequest
5 голосов
/ 23 февраля 2012

Было много похожих вопросов, но ни один из них не касался этого расчета.Используя javascript i, легко найти число миллисекунд diff ч / б 2 даты, например:

var mil = Math.floor(new Date("1/1/2012")  - new Date("1/7/2012"))

mil назначено 518400000

, чтобы получить недели, которые я бы сделалниже

var weeks = mil / (1000*7*24*60*60);

в приведенном выше примере он точно соответствует 1 неделе.Для других возможных входных данных я хотел бы получить выходные данные как например:

n Weeks, y days , z hours

Так что я сделал mil % (1000*7*24*3600), чтобы получить модуль и из остатка вычислить количество дней.но удивительно, что это был ответ, который я получил от консоли 1 weeks , 6 days кажется, что неделя, рассчитанная ранее, также учитывается по дням.

Как мне правильно рассчитать их?

Ответы [ 2 ]

10 голосов
/ 23 февраля 2012
var seconds = (mil / 1000) | 0;
mil -= seconds * 1000;

var minutes = (seconds / 60) | 0;
seconds -= minutes * 60;

var hours = (minutes / 60) | 0;
minutes -= hours * 60;

var days = (hours / 24) | 0;
hours -= days * 24;

var weeks = (days / 7) | 0;
days -= weeks * 7;

Предполагая, что mils неотрицательно, это оставляет mils в диапазоне [0, 1000), оставляет minutes и seconds в диапазоне [0, 60), оставляет hoursв диапазоне [0, 24) и оставляет days в диапазоне [0, 7).

3 голосов
/ 23 февраля 2012

Между ними должно быть 6 дней, а не одна неделя.Ваш подсчет недель должен округляться:

var weeks = Math.floor(mil / (1000 * 7 * 24 * 60 * 60));

Кроме того, ваши миллисекунды отрицательны;Вы хотите либо

var mil = new Date("1/7/2012") - new Date("1/1/2012");

, либо

var weeks = Math.floor(Math.abs(mil) / (1000 * 7 * 24 * 60 * 60));
...