2016-01-24 3 views
9

Я хочу получить дату следующего понедельника или четверга (или сегодня, если это понедельник или четверг). Как работает Moment.js в пределах воскресенье - в субботу, мне приходится работать на текущий день и рассчитать следующий понедельник или четверг на его основе:Получение следующего понедельника или четверга с moment.js

if (moment().format("dddd")=="Sunday") { var nextDay = moment().day(1); } 
if (moment().format("dddd")=="Monday") { var nextDay = moment().day(1); } 
if (moment().format("dddd")=="Tuesday") { var nextDay = moment().day(4); } 
if (moment().format("dddd")=="Wednesday") { var nextDay = moment().day(4); } 
if (moment().format("dddd")=="Thursday") { var nextDay = moment().day(4); } 
if (moment().format("dddd")=="Friday") { var nextDay = moment(.day(8); } 
if (moment().format("dddd")=="Saturday") { var nextDay = moment().day(8); } 

Это работает, но, конечно, есть лучше путь!

+0

HTTP: // StackOverflow .com/questions/22144940/get-next-week-start-and-end-using-jquery-and-moment-js –

+0

Как вы используете это ... или хотите его использовать? И почему понедельник +1, а во вторник +4? – charlietfl

+0

Ах, если сегодня понедельник или четверг сегодня, если не получите следующий понедельник или четверг. Я отредактирую вопрос –

ответ

24

Первый вам нужно знать, где вы находитесь на неделе: moment.day(), или немного более предсказуемым (несмотря на локаль) moment().isoWeekday().

Вы хотите знать, меньше или меньше сегодняшнего дня, чем в тот день, когда вы хотите. Если он больше, вы хотите использовать на следующей неделе. Если он меньше, вы можете использовать понедельник или четверг на этой неделе.

const dayINeed = 4; // for Thursday 
if (moment().isoWeekday() <== dayINeed) { 
    return moment().isoWeekday(dayINeed); 
} else... 

Затем вы хотите решение, которое даст вам «в понедельник на следующей неделе», независимо от того, где вы находитесь на текущей неделе. В двух словах, вы хотите сначала перейти на следующую неделю, используя moment().add(1, 'weeks'). Как только вы на следующей неделе, вы можете выбрать нужный день, используя moment().day(1).

Вместе:

const dayINeed = 4; // for Thursday 

// if we haven't yet passed the day of the week that I need: 
if (moment().isoWeekday() <== dayINeed) { 
    // then just give me this week's instance of that day 
    return moment().isoWeekday(dayINeed); 
} else { 
    // otherwise, give me next week's instance of that day 
    return moment().add(1, 'weeks').isoWeekday(dayINeed); 
} 

См https://stackoverflow.com/a/27305748/800457

5

moment().day() предоставит вам номер, относящийся к дневному значению.

Что еще лучше: moment().day(1 + 7) и moment().day(4 + 7) предоставит вам следующий понедельник, следующий четверг, соответственно.

Смотреть больше: http://momentjs.com/docs/#/get-set/day/

+1

К сожалению, это не тот случай. Если сегодня вторник 26-го, момент(). День (1) вернется в понедельник 25-й - момент(). День (8) возвращается в следующий понедельник. –

2

ИМХО более элегантный способ:

var setDays = [ 1, 1, 4, 4, 4, 8, 8 ], 
    nextDay = moment().day(setDays[moment().day()]); 
4

Следующая может быть использована для получения любой следующей даты будний день с этого момента (или любой другой даты)

var weekDayToFind = moment().day('Monday').weekday(); //change to searched day name 

var searchDate = moment(); //now or change to any date 
while (searchDate.weekday() !== weekDayToFind){ 
    searchDate.add(1, 'day'); 
} 
0

Вот, например, Следующий понедельник:

var chosenWeekday = 1 // Monday 

var nextChosenWeekday = chosenWeekday < moment().weekday() ? moment().weekday(chosenWeekday + 7) : moment().weekday(chosenWeekday) 
+0

Извините, но это неправда. Ваш первый пример даст понедельник текущей недели. Если это уже вторник, например, он даст вам предыдущий понедельник. –

+0

Вы правы lemme исправить, что @ShannonPoole – softcode

+0

@ShannonPoole Исправлено thx для указания – softcode

2

получить следующий понедельник используя момент

moment().startOf('isoWeek').add(1, 'week'); 
+0

Не будет ли это зависеть от того, какой день считается началом недели в используемой локали? – jorisw

+1

Начиная с версии 2 @jorisw 'startOf ('week') использует день начала недели, начинающийся с локали.' – AshUK

+1

и '.startOf ('isoWeek')' ISO 8601 предусматривает, что число дней недели от 1 до 7, начиная с понедельника и заканчивается в воскресенье – AshUK

0

Вот решение, чтобы найти следующий понедельник, или сегодня, если это понедельник:

const dayOfWeek = moment().day('monday').hour(0).minute(0).second(0); 

const endOfToday = moment().hour(23).minute(59).second(59); 

if(dayOfWeek.isBefore(endOfToday)) { 
    dayOfWeek.add(1, 'weeks'); 
} 
Смежные вопросы