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

次の整数が必要な場合は、使用parseFloatできますMath.roundMath.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 オブジェクトの次のプロパティを使用します。

dayValue に 0 を使用すると、日付は前月の最終日に設定されます

それで、

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 に答える