2015-01-11 14 views
1

У меня есть приложение календаря, где пользователь может выбрать из значений выпадающих 2:Получить первую дату объекта недели DATE для набора пользователя «первого дня недели» значения

воскресенья и понедельник

как первый день недели.

Учитывая, что пользователь установлен как первый день недели: 'monday' (dayIndex 1)

И текущей даты sunday 11th january 2015 (dayIndex 0)

откуда я знаю, что FirstDateOfWeek является

->monday 12th january 2015

(где то «sunday 18th january 2015» будет последней датой ш крон)

И не

->monday 5th january 2015

(где то sunday 11th january 2015 будет дата последней недели)

+0

Не было, с недель, начиная с понедельника, в первый день недели, заканчивающийся воскресным jan 11 be * monday jan 5 * (year = 2015)? – KooiInc

ответ

2

Если первый день недели является воскресенье, вычитать номер дня с даты, чтобы получить первое воскресенье этой недели. Если понедельник - первый день, дайте дату - ((dayNumber || 7) - 1). В функции:

/** 
* Given a Date, return a new Date object for the first 
* day of the week. 
* @param {Date} date - date object 
* @param {boolean} mon - true if week starts on Monday, otherwise starts on Sunday 
*/ 
function getFirstDayOfWeek(date, mon) { 

    // copy date object 
    date = new Date(+date); 

    if (mon) { 
    date.setDate(date.getDate() - (date.getDay() || 7) + 1); 

    } else { 
    date.setDate(date.getDate() - date.getDay()); 
    } 
    return date; 
} 

// Sun 11 Jan 2015 
var date = new Date(2015, 0, 11) 

console.log(getFirstDayOfWeek(date));  // Sun 11 Jan 2015 
console.log(getFirstDayOfWeek(date, true)); // Mon 05 Jan 2015 

Так что вам просто нужно сохранить выбор пользователя из какой день недели они хотят, чтобы начать, а затем передать либо истинным (если это понедельник) или ложным (если это воскресенье).

+0

Спасибо за код, мои юнит-тесты теперь зеленые до моих ожиданий :-) – Elisabeth

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