6

周围有许多类似的问题,但没有一个解决这个计算。使用 javascript i 很容易找到前 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似乎之前计算的一周也重新计算了几天。

我应该如何正确计算这些?

4

2 回答 2

12
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为非负数,则 thismils在 [0, 1000) 范围内留下minutesseconds在 [0, 60) 范围内留下 and,hours在 [0, 24)days范围内留下,在 [0, 7) 范围内留下。

于 2012-02-23T05:01:02.023 回答
4

它们之间应该有 6 天,而不是 1 周。您的周数计算需要四舍五入:

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));
于 2012-02-23T04:59:28.070 回答