2014-11-23 134 views
0

爲題一週內天數建議 - (前26年),我希望得到一個日期時,我只有週數(前。47)和當天的號碼(例3 - 這將是星期三)。獲取日期一年中,週數,用JavaScript

我已經看到了一些類似的問題,但反向工程的答案沒有提供任何成功的結果。

任何想法?

回答

4

我強烈建議你使用moment.js庫。這是一個完整的日期操作庫。

您的問題將通過這個moment().year(2014).week(47).day(3).toDate();

+0

感謝,我一定會看一看。看起來像它會解決我所有的問題,但:) – Justine 2014-11-23 21:44:09

+0

如果你尋找2014年第47周的星期三,上​​述解決方案是行不通的。它說:錯誤:你輸入的一天不是在第47周。 我明白爲什麼,但它並不完全是OP(和我)所尋找的。 – F3L1X79 2015-12-29 14:58:55

+0

也許有另一個版本的時刻可以用不同的api。文檔說什麼? – 2015-12-29 15:24:21

1

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東西:)

0

從解決: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));

相關問題