parseInt округление количества дней в месяце - PullRequest
1 голос
/ 05 января 2012

Количество дней в месяце, рассчитанных таким образом:

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 является фактической датой, для марта она содержит значение (из консоли 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 года.

Можно ли полагаться на Math.round() при работе с датами?

Ответы [ 3 ]

2 голосов
/ 05 января 2012

Вы можете использовать parseFloat и Math.round Если вам нужно следующее целое число, вы можете использовать Math.ceil

1 голос
/ 05 января 2012

Как далеко вы проверили это?Мне не кажется на 100% безопасным.

Взгляните на этот метод: http://snippets.dzone.com/posts/show/2099

Как я это делал некоторое время назад, и он работает очень хорошо

0 голосов
/ 05 января 2012

Можно ли полагаться на 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
...