2012-01-05 5 views
1

Количество дней в месяц рассчитывается следующим образом:ParseInt округления для количества дней в месяце

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)) результаты , но

(end-start)/(1000*60*60*24) результаты +30,958333333333332

Ожидаю округления до , при использовании parseInt() функция.

Math.round((end-start)/(1000*60*60*24)) результаты , что является правильным в марте 2012 года

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

ответ

1

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

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

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

+0

я также нерешительности в его надежном креплении, поэтому задал вопрос) спасибо за подсказку, я проверю его – sergionni

+0

Вы могли бы сделать выйдите из него, запустив его на несколько месяцев, чтобы просто проверить с помощью реального календаря. Это может сработать. – OptimusCrime

+0

Я только что проверил. Ваше решение работает нормально. – sergionni

2

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

+0

Вы можете использовать их вместе как 'Math.round (parseFloat ((end-start)/(1000 * 60 * 60 * 24)))', потому что просто parseFloat результаты float также – sergionni

+0

'Math.ceil' выглядит нормально – sergionni

0

Одобрено ли использовать Math.round(), имея дело с датами?

Нет, это НЕ! Даты не являются числами, today + 3600 * 24 не всегда равен tomorrow.

Чтобы узнать дни в использовании месяц следующее свойство Date object:

если вы используете 0 для dayValue, дата будет установлена ​​в последний день предыдущего месяца

так,

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


alert(daysInMonth(2011,1)) // 28 
alert(daysInMonth(2012,1)) // 29 
Смежные вопросы