爲題一週內天數建議 - (前26年),我希望得到一個日期時,我只有年,週數(前。47)和當天的號碼(例3 - 這將是星期三)。獲取日期一年中,週數,用JavaScript
我已經看到了一些類似的問題,但反向工程的答案沒有提供任何成功的結果。
任何想法?
爲題一週內天數建議 - (前26年),我希望得到一個日期時,我只有年,週數(前。47)和當天的號碼(例3 - 這將是星期三)。獲取日期一年中,週數,用JavaScript
我已經看到了一些類似的問題,但反向工程的答案沒有提供任何成功的結果。
任何想法?
我強烈建議你使用moment.js庫。這是一個完整的日期操作庫。
您的問題將通過這個moment().year(2014).week(47).day(3).toDate();
function getDatebyWeek(year, week, day) {
var d = {
year: year,
month: 0,
day: 1
};
var date = new Date(d.year, d.month, d.day);
var weekCount = 0;
var month = 1;
var done = false;
while (weekCount < week) {
while (date.getMonth() < month) {
if (d.day % 7 === 0) {
weekCount++;
}
d.day++;
date.setDate(d.day);
if (weekCount === week) {
done = true;
break;
}
}
if (done) {
break;
}
month++;
d.month = month - 1;
d.day = 1;
date.setMonth(d.month);
date.setDate(d.day);
}
if (day <= d.day && day >= (d.day - 7)) {
return new Date(d.year, d.month - 1, day);
} else {
throw new Error('The day you entered is not in week ' + week);
}
}
var wk = getDatebyWeek(2014, 47, 22);
document.write(wk.toString());
我寫的情況下,這實在是太醜功能你對moment.js東西:)
從解決:Getting first date in week given a year,weeknumber and day number in javascript
OP的答案是(如果dayNumber開始從1日(星期一) - 7日(星期日)):
function getWeekDate(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 - 1)) * 86400000);
};
alert(getWeekDate(2014, 47, 3));
感謝,我一定會看一看。看起來像它會解決我所有的問題,但:) – Justine 2014-11-23 21:44:09
如果你尋找2014年第47周的星期三,上述解決方案是行不通的。它說:錯誤:你輸入的一天不是在第47周。 我明白爲什麼,但它並不完全是OP(和我)所尋找的。 – F3L1X79 2015-12-29 14:58:55
也許有另一個版本的時刻可以用不同的api。文檔說什麼? – 2015-12-29 15:24:21