2015-09-21 57 views
1

我想将几周,几天和几小时转换为秒,然后再将它们转换回来。JS星期,几小时和几秒到几秒..再回来

当我将它们转换回来,天数和小时不正确:

var weeks = 3, 
days = 5, 
hours = 1; 

//convert to seconds 
sec_in_w = weeks * 604800, 
sec_in_d = days * 86400, 
secs_in_h = hours * 3600, 
secs = sec_in_w + sec_in_d + secs_in_h; 

//convert back to weeks, days, and hours 
new_w = Math.floor(secs/604800); 
secs -= new_w; 
new_d = Math.floor(secs/86400); 
secs -= new_d; 
new_h = Math.floor(secs/3600); 

console.log('weeks: ' + new_w); 
console.log('days: ' + new_d); 
console.log('hour: ' + new_h); 

DEMO:

http://codepen.io/anon/pen/avZwBp

+0

这是因为Math.floor的你使用 – romuleald

+0

@romuleald,抱歉,但不是事实并非如此。 Math.floor在这里很好。问题在于减少了几周而没有将它们转换回秒。 – MartyB

回答

3
//convert back to weeks, days, and hours  
new_w = Math.floor(secs/604800); 
secs = secs % 604800; 
new_d = Math.floor(secs/86400); 
secs = secs % 86400; 
new_h = Math.floor(secs/3600); 

使用模给人的剩余减去周的天数。

2

你减去周,天数,而不是秒数在几周或几天内。

secs -= new_w * 604800; 
new_d = Math.floor(secs/86400); 
secs -= new_d * 86400; 
0

你必须从秒

//convert to seconds 
    sec_in_w = weeks * 604800, 
    sec_in_d = days * 86400, 
    secs_in_h = hours * 3600, 
    secs = sec_in_w + sec_in_d + secs_in_h; 

codepen

0

让我们来看看发生了什么这里: 在行:

secs = sec_in_w + sec_in_d + secs_in_h;

你是在3周内+5天+ 1小时,或

secs = 2250000;

秒增加值

然后你按604800来划分,你应该得到3,然后你从这个大的值减去这个3 ECS :)。你可以自己算一算:

(2250000 - 3)/86400 = 26

你得到什么:)同为小时。

解决方案是先将您的数字转换回其表示形式,以秒为单位。

//convert back to weeks, days, and hours 
new_w = Math.floor(secs/604800); 
secs -= new_w * 604800; 
new_d = Math.floor(secs/86400); 
secs -= new_d * 86400; 
new_h = Math.floor(secs/3600); 

顺便说一句,JavaScript有处理dates的解决方案。如果你这样做了练习,我什么也没有说当然:)的

相关问题