从毫秒计算周数,天数和小时数

时间:2012-02-23 04:57:28

标签: javascript date hour days

周围有许多类似的问题,但没有一个解决这个问题。使用javascript我很容易找到ex:

的毫秒差异b / w 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周。对于其他可能的输入,我希望得到输出为ex:

n Weeks, y days , z hours

所以我做了mil % (1000*7*24*3600)以获得模数,并从余数计算天数。但令人惊讶的是,这是我从控制台得到的答案 1 weeks , 6 days似乎之前计算的那一周也会再次计算几天。

我该如何正确计算这些?

2 个答案:

答案 0 :(得分:10)

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],minutesseconds的范围为[0,60] ,在[0,24]范围内留下hours,在[0,7]范围内留下days

答案 1 :(得分:3)

他们之间应该有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));