1

以下は、週の日付を計算するコードです。

//Gets the week dayNumber date against the year,week number
var getWeekDate = function (year, weekNumber, dayNumber) {

var date = new Date(year, 0, 10, 0, 0, 0),
    day = new Date(year, 0, 4, 0, 0, 0),
    month = day.getTime() - date.getDay() * 86400000;
return new Date(month + ((weekNumber - 1) * 7 + dayNumber) * 86400000);
};

次の値を指定すると、コードは正常に機能します。

Input:
year = 2012
weekNumber = 1
dayNumber = 0 //私の週は月曜日から始まるので、0 を指定します。

出力:
2nd, Jan 2012 //その通りです。

Input:
year = 2013
weekNumber = 1
dayNumber = 0 //私の週は月曜日から始まるので、0 を指定します。

出力:
2012 年 12 月 31 日 //それは不正解です。

2013 年の最初の週は 2013 年 1 月 7 日 ieMonday から始まりますが、上記のコードは正しく計算していません。

4

2 に答える 2

2

moment.jsのISO カレンダー プラグインを確認することをお勧めします。

于 2012-08-09T19:38:10.613 に答える
1

2013 年の第 1 週のゼロ日 (月曜日) はまだ 2012 年の一部であるため、これは実際には正確です。条件を使用して、要求されたその週の曜日が年の一部であるかどうかを確認できます。

//Gets the week dayNumber date against the year,week number
var getWeekDate = function (year, weekNumber, dayNumber) {

var date = new Date(year, 0, 10, 0, 0, 0),
    day = new Date(year, 0, 4, 0, 0, 0),
    month = day.getTime() - date.getDay() * 86400000,
    ans = new Date(month + ((weekNumber - 1) * 7 + dayNumber) * 86400000);
if (weekNumber === 1 && ans.getMonth() !== 0) {
    // We're still in last year... handle appropriately
}
return ans;
};

余談ですが、いくつかの変数チェックを配置することは悪い考えではありません。0週目、55週目、92日目は問題なく入力できています。明らかに、結果は依然として正確ですが、カレンダーの観点から考えている人には混乱を招く結果になる可能性があります。

于 2012-08-09T20:03:27.293 に答える