2016-03-18 5 views
0

Я хотел бы получить первый день недели в конкретном году (при условии, что неделя начнется в понедельник).Как получить понедельник недели как число

сценарий: год 2016. Он должен вернуться 4, потому что понедельник 4-го января 2016 года в первый день недели 1 в 2016 году

Как бы мне это сделать? Я хочу что-то вроде этого:

var date = new Date(); 
var week = 1; 
var year = 2016; 
date.getMonday(week, year); // 4 (because 04/01/2016 is a Monday and is week number 1) 

week = 5; 
date.getMonday(week, year); // 30 (because 30/01/2016 is a Monday and is week number 5) 

Благодарности

ответ

3

Вы можете использовать метод getDay() в JavaScript, чтобы выяснить, в какой день недели объекта дата относится.

var output = document.getElementById('output'); 
 

 
var year = 2016; 
 
var firstMonday = new Date(year, 0, 1); // year, month (zero-index), date 
 

 
// starting at January 1st, increment the date until a Monday (`getDay() = 1`) 
 
while(firstMonday.getDay() !== 1) { 
 
    firstMonday.setDate(firstMonday.getDate() + 1); 
 
} 
 

 
// output the date of the first Monday in January 
 
output.value = firstMonday.getDate();
<textarea id="output"></textarea>

+0

прекрасно работает. Почему я не подумал просто зацикливаться, пока первый день не был понедельником ... Черт. Благодаря! – MortenMoulder

+1

Был там ... много раз. – Quantastical

1

Я сделал функцию, чтобы решить эту проблему ... см ниже

function getDayInWeek(dayOfWeek, week, year){ 
    dayOfWeek = dayOfWeek % 7; //ensure day of week 
    var baseDate = new Date(year, 0, 1); //get the first day 
    var firstDayOfWeek = baseDate.getDay(); //get the first week day 
    var inWeek = (week - 1) * 7; //get the days to start of week 
    var diff = firstDayOfWeek - dayOfWeek; //get the diff for day in that week 
    if(diff < 0) diff += 7; 
    baseDate.setDate(inWeek + diff); 
    return baseDate.getDate(); //get the month day 

} 

использовать указать день недели

// 0 = sunday 
// 1 = monday 
// 2 = tuesday 
// 3 = wednesday 
// 4 = thursday 
// 5 = friday 
// 6 = saturday 
var firstMonday = getDayInWeek(1, 1, 2016); // the monday in first week of 2016 

var mondayOf5 = getDayInWeek(1, 5, 2016); // the monday in 5th week of 2016 
+0

Я ценю это, но я чувствую, что он делает много ненужных вычислений. Я добавлю вам +1, потому что он работает: P – MortenMoulder

+0

Более общий, но дороже: /, но решает проблему, которую вы выберете за неделю, которую вы хотите –

0

Чтобы получить ISO -8601 неделя, которая всегда будет в понедельник, см. Ссылку: Wikipedia Calculate ISO 8601

function getISOWeek(week, year) { 
 
    var _date = new Date(year, 0, 1 + (week - 1) * 7); 
 
    var date_of_week = _date.getDay(); 
 
    var ISOweekStart = _date; 
 
    (date_of_week <= 4) ? ISOweekStart.setDate(_date.getDate() - _date.getDay() + 1): ISOweekStart.setDate(_date.getDate() + 8 - _date.getDay()); 
 
    return ISOweekStart; 
 
} 
 
console.log(getISOWeek(10, 2016));

+0

Не работает. 1-я неделя 2019 года возвращается в понедельник 31 декабря в декабре ** 2018 года **. Также он не возвращает число. – MortenMoulder

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