2014-11-23 2 views
0

как тема предлагает - (. Ех 2014) Я ищу, чтобы получить дату, когда все у меня есть год, номер недели (например, 47) и номер дня в течение этой недели (например, 3 - это будет среда).Получить дату данного года, номер недели, номер дня в неделе с JavaScript

Я видел некоторые подобные вопросы, наоборот, но обратные инженерные ответы не дали никаких успешных результатов.

Любые идеи?

ответ

4

Я бы очень рекомендовал вам использовать библиотеку moment.js. Это полная библиотека манипулирования датами.

Ваша проблема будет решена с помощью этой moment().year(2014).week(47).day(3).toDate();

+0

Спасибо, я обязательно посмотрю. Похоже, что он решит все мои проблемы, хотя :) – Justine

+0

Выше решение не работает, если вы ищете среду недели 47 2014 года. В ней говорится: Ошибка: день, когда вы ввели не на неделе 47. Я действительно понимаю, почему, но это не совсем то, что искали OP (и я). – F3L1X79

+0

Возможно, есть еще одна версия момента, доступная с другим api. Что говорит док? –

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));

Смежные вопросы