2015-09-16 2 views
0

Я хочу определить первый день недели по заданной дате в Moment.js. Это мой код:Определить первый день недели по данной дате в момент js

var begin = moment("2015-08-15").startOf('week').isoWeekday(0); 
console.log(begin); 
var end = moment("2015-08-15").endOf('week').isoWeekday(0); 
console.log(end); 

Я получаю следующий вывод:

Object { _isAMomentObject: true, _i: "2015-08-15", _f: "YYYY-MM-DD", _isUTC: false, _pf: Object, _locale: Object, _d: Date 2015-08-01T22:00:00.000Z } 
Object { _isAMomentObject: true, _i: "2015-08-15", _f: "YYYY-MM-DD", _isUTC: false, _pf: Object, _locale: Object, _d: Date 2015-08-09T21:59:59.999Z } 

Согласно документации местного является «ан» по умолчанию, и это будет означать, что первый день недели воскресенье. По моему мнению, правильный результат должен быть:

begin = 2015-08-09 
end = 2015-08-15 

Когда я изменил isoWeekday от «0» до «1» результат выглядит следующим образом:

Object { _isAMomentObject: true, _i: "2015-08-15", _f: "YYYY-MM-DD", _isUTC: false, _pf: Object, _locale: Object, _d: Date 2015-08-02T22:00:00.000Z } 
Object { _isAMomentObject: true, _i: "2015-08-15", _f: "YYYY-MM-DD", _isUTC: false, _pf: Object, _locale: Object, _d: Date 2015-08-10T21:59:59.999Z } 

Это тоже неправильно. Правильный ответ будет:

begin = 2015-08-10 
end = 2015-08-16 
+0

Я не думаю, что это локальная вещь, но еще мнение или религиозная вещь, чтобы начать неделю в воскресенье , – putvande

+0

Вы говорите, что у momentjs есть это неправильно? Если да, то на что мы пытаемся ответить здесь? – Jamiec

+1

Я думаю, вам нужно сделать 'startOf ('isoweek')' вместо 'startOf ('week')' – putvande

ответ

0

Правильный ответ будет:

var begin = moment().subtract(1, 'week').startOf('week').format("YYYY MM DD"); 
var end = moment().subtract(1, 'week').endOf('week').format("YYYY MM DD"); 

Благодаря помощи по @MattJohnson

1

Что происходит в том, что вы получаете startOf() вашу локальную неделю 2015-08-15, что воскресенье 2015-08-09, а затем ваши перезагружают эту ISO недели, который с понедельника по воскресенье, до его первого дня, который, конечно, в понедельник 2015-08-02.

Для обеспечения постоянного поведения необходимо использовать startOf('isoWeek').

+0

Дата 2015-08-02 - воскресенье, а не понедельник. –

+0

Привет @punund, Когда я использую этот код: 'var begin = moment (" 2015-08-15 "). StartOf ('isoWeekday'); console.log (начало); var end = moment ("2015-08-15"). EndOf ('isoWeekday'); console.log (end); ' Результат: ' var begin = 2015-08-14; var end = 2015-08-14; ' Я сделал что-то не так? – Peter

+0

'' isoWeek'', а не '' isoWeekday''. Кроме того, вы должны использовать 'format' или другую функцию вывода, а не смотреть на внутренние (подчеркнутые) свойства. –

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