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

Dee*_*ons 5 javascript date hour days

有很多类似的问题,但没有一个解决这个问题.使用javascript我很容易找到ex的毫秒数差异b/w 2日期:

var mil = Math.floor(new Date("1/1/2012")  - new Date("1/7/2012"))
Run Code Online (Sandbox Code Playgroud)

mil 被安排了 518400000

我会在下面做几周

var weeks = mil / (1000*7*24*60*60);
Run Code Online (Sandbox Code Playgroud)

在上面的例子中它恰好适合1一周.对于其他可能的输入,我想得到输出为ex:

n Weeks, y days , z hours
Run Code Online (Sandbox Code Playgroud)

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

我该如何正确计算?

Mik*_*uel 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;
Run Code Online (Sandbox Code Playgroud)

假设mils是非负的,这留mils在范围[0,1000),叶子minutesseconds范围[0,60]中,叶子hours在[0,24]范围内,并且离开days范围[0,7].


Dom*_*nic 6

两者之间应该间隔 6 天,而不是一周。您的周数计算需要向下舍入:

var weeks = Math.floor(mil / (1000 * 7 * 24 * 60 * 60));
Run Code Online (Sandbox Code Playgroud)

另外,你的毫秒是负数;你想要要么

var mil = new Date("1/7/2012") - new Date("1/1/2012");
Run Code Online (Sandbox Code Playgroud)

或者

var weeks = Math.floor(Math.abs(mil) / (1000 * 7 * 24 * 60 * 60));
Run Code Online (Sandbox Code Playgroud)