1

一个月的天数以这种方式计算:

var start = new Date(d.getFullYear(),d.getMonth(),1);
var end = new Date(d.getFullYear(),d.getMonth()+1,1);
var daysInCurMonth = parseInt((end-start)/(1000*60*60*24));

d是实际日期,对于 3 月它具有价值(来自 FireBug 控制台):
Date {Thu Mar 01 2012 00:00:00 GMT+0200}

parseInt((end-start)/(1000*60*60*24))结果30,但是

(end-start)/(1000*60*60*24)结果30.958333333333332

使用函数时,我希望四舍五入到31 。parseInt()

Math.round((end-start)/(1000*60*60*24))结果31,这对于 2012 年 3 月是正确的。

Math.round()在处理日期时可以依靠吗?

4

3 回答 3

2

你可以使用parseFloatandMath.round 如果你需要下一个整数,你可以使用Math.ceil

于 2012-01-05T10:58:26.190 回答
1

您对此进行了多长时间的测试?对我来说似乎不是 100% 安全。

看看这个方法:http ://snippets.dzone.com/posts/show/2099

我前一阵子是怎么做的,效果很好:)

于 2012-01-05T10:55:36.767 回答
0

在处理日期时可以依赖 Math.round() 吗?

不它不是!日期不是数字,today + 3600 * 24并不总是等于tomorrow

要找出月份中的天数,请使用Date 对象的以下属性:

如果使用 0 作为 dayValue,则日期将设置为上个月的最后一天

所以,

function daysInMonth(y, m)
{
    return new Date(y, m + 1, 0).getDate();
}


alert(daysInMonth(2011,1)) // 28
alert(daysInMonth(2012,1)) // 29
于 2012-01-05T11:21:35.237 回答