您可以使用时间除以精度的mod,
如果你想让凌晨 1 点向下舍入到午夜,
而不是最多 3 点、6 点或中午。
function roundHours(precision, d){
precision= precision || 1;
d= d? new Date(d):new Date();
if(d.getSeconds()>30) d.setMinutes(d.getMinutes()+1);
if(d.getMinutes>30) hours+= 1;
var hours= d.getHours(), diff= hours%precision;
if(diff>precision/2) hours+= (precision-diff);
else hours-= diff;
d.setHours(hours, 0, 0, 0);
return d.toLocaleString();
}
//测试精度:
var A= [], range=[3,6,12,24], d1= new Date();
for(var x= 0; x<4; x++){
A.push('\n'+range[x]+ ' hour precision:');
for(var i= 0; i<24; i++){
d1.setHours(i);
A.push(i+': '+roundHours(range[x], d1));
}
}
A.join('\n');
//返回值:(字符串)
3 hour precision:
00: Wednesday, September 11, 2013 12:00:00 AM
01: Wednesday, September 11, 2013 12:00:00 AM
02: Wednesday, September 11, 2013 3:00:00 AM
03: Wednesday, September 11, 2013 3:00:00 AM
04: Wednesday, September 11, 2013 3:00:00 AM
05: Wednesday, September 11, 2013 6:00:00 AM
06: Wednesday, September 11, 2013 6:00:00 AM
07: Wednesday, September 11, 2013 6:00:00 AM
08: Wednesday, September 11, 2013 9:00:00 AM
09: Wednesday, September 11, 2013 9:00:00 AM
10: Wednesday, September 11, 2013 9:00:00 AM
11: Wednesday, September 11, 2013 12:00:00 PM
12: Wednesday, September 11, 2013 12:00:00 PM
13: Wednesday, September 11, 2013 12:00:00 PM
14: Wednesday, September 11, 2013 3:00:00 PM
15: Wednesday, September 11, 2013 3:00:00 PM
16: Wednesday, September 11, 2013 3:00:00 PM
17: Wednesday, September 11, 2013 6:00:00 PM
18: Wednesday, September 11, 2013 6:00:00 PM
19: Wednesday, September 11, 2013 6:00:00 PM
20: Wednesday, September 11, 2013 9:00:00 PM
21: Wednesday, September 11, 2013 9:00:00 PM
22: Wednesday, September 11, 2013 9:00:00 PM
23: Thursday, September 12, 2013 12:00:00 AM
6 hour precision:
00: Wednesday, September 11, 2013 12:00:00 AM
01: Wednesday, September 11, 2013 12:00:00 AM
02: Wednesday, September 11, 2013 12:00:00 AM
03: Wednesday, September 11, 2013 12:00:00 AM
04: Wednesday, September 11, 2013 6:00:00 AM
05: Wednesday, September 11, 2013 6:00:00 AM
06: Wednesday, September 11, 2013 6:00:00 AM
07: Wednesday, September 11, 2013 6:00:00 AM
08: Wednesday, September 11, 2013 6:00:00 AM
09: Wednesday, September 11, 2013 6:00:00 AM
10: Wednesday, September 11, 2013 12:00:00 PM
11: Wednesday, September 11, 2013 12:00:00 PM
12: Wednesday, September 11, 2013 12:00:00 PM
13: Wednesday, September 11, 2013 12:00:00 PM
14: Wednesday, September 11, 2013 12:00:00 PM
15: Wednesday, September 11, 2013 12:00:00 PM
16: Wednesday, September 11, 2013 6:00:00 PM
17: Wednesday, September 11, 2013 6:00:00 PM
18: Wednesday, September 11, 2013 6:00:00 PM
19: Wednesday, September 11, 2013 6:00:00 PM
20: Wednesday, September 11, 2013 6:00:00 PM
21: Wednesday, September 11, 2013 6:00:00 PM
22: Thursday, September 12, 2013 12:00:00 AM
23: Thursday, September 12, 2013 12:00:00 AM
12 hour precision:
00: Wednesday, September 11, 2013 12:00:00 AM
01: Wednesday, September 11, 2013 12:00:00 AM
02: Wednesday, September 11, 2013 12:00:00 AM
03: Wednesday, September 11, 2013 12:00:00 AM
04: Wednesday, September 11, 2013 12:00:00 AM
05: Wednesday, September 11, 2013 12:00:00 AM
06: Wednesday, September 11, 2013 12:00:00 AM
07: Wednesday, September 11, 2013 12:00:00 PM
08: Wednesday, September 11, 2013 12:00:00 PM
09: Wednesday, September 11, 2013 12:00:00 PM
10: Wednesday, September 11, 2013 12:00:00 PM
11: Wednesday, September 11, 2013 12:00:00 PM
12: Wednesday, September 11, 2013 12:00:00 PM
13: Wednesday, September 11, 2013 12:00:00 PM
14: Wednesday, September 11, 2013 12:00:00 PM
15: Wednesday, September 11, 2013 12:00:00 PM
16: Wednesday, September 11, 2013 12:00:00 PM
17: Wednesday, September 11, 2013 12:00:00 PM
18: Wednesday, September 11, 2013 12:00:00 PM
19: Thursday, September 12, 2013 12:00:00 AM
20: Thursday, September 12, 2013 12:00:00 AM
21: Thursday, September 12, 2013 12:00:00 AM
22: Thursday, September 12, 2013 12:00:00 AM
23: Thursday, September 12, 2013 12:00:00 AM
24 hour precision:
00: Wednesday, September 11, 2013 12:00:00 AM
01: Wednesday, September 11, 2013 12:00:00 AM
02: Wednesday, September 11, 2013 12:00:00 AM
03: Wednesday, September 11, 2013 12:00:00 AM
04: Wednesday, September 11, 2013 12:00:00 AM
05: Wednesday, September 11, 2013 12:00:00 AM
06: Wednesday, September 11, 2013 12:00:00 AM
07: Wednesday, September 11, 2013 12:00:00 AM
08: Wednesday, September 11, 2013 12:00:00 AM
09: Wednesday, September 11, 2013 12:00:00 AM
10: Wednesday, September 11, 2013 12:00:00 AM
11: Wednesday, September 11, 2013 12:00:00 AM
12: Wednesday, September 11, 2013 12:00:00 AM
13: Thursday, September 12, 2013 12:00:00 AM
14: Thursday, September 12, 2013 12:00:00 AM
15: Thursday, September 12, 2013 12:00:00 AM
16: Thursday, September 12, 2013 12:00:00 AM
17: Thursday, September 12, 2013 12:00:00 AM
18: Thursday, September 12, 2013 12:00:00 AM
19: Thursday, September 12, 2013 12:00:00 AM
20: Thursday, September 12, 2013 12:00:00 AM
21: Thursday, September 12, 2013 12:00:00 AM
22: Thursday, September 12, 2013 12:00:00 AM
23: Thursday, September 12, 2013 12:00:00 AM