2016-01-24 13 views
9

Chcę uzyskać datę następnego poniedziałku lub czwartku (lub dzisiaj, jeśli jest Pon lub czw). Jak działa Moment.js w granicach niedziela - sobota, mam wypracować bieżący dzień i obliczyć najbliższy poniedziałek lub czwartek podstawie, że:Pierwsze następny poniedziałek lub czwartek z 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); } 

To działa, ale na pewno nie jest lepszy droga!

+0

http: // stackoverflow .pl/questions/22144940/get-next-week-start-and-end-using-jquery-and-moment-js –

+0

w jaki sposób używasz tego ... lub chcesz go użyć? Dlaczego poniedziałek +1, ale wtorek to +4? – charlietfl

+0

Ach, jeśli dzisiaj jest Mon lub czw dzisiaj dostaniesz, jeśli nie dostaniesz następnego Mon lub Czwartego. Będę edytować pytanie –

Odpowiedz

24

Pierwszy musisz wiedzieć, gdzie jesteś w tygodniu: moment.day(), lub nieco bardziej przewidywalne (wbrew lokalizacji) moment().isoWeekday().

Chcesz wiedzieć, czy dzisiejszy dzień jest mniejszy lub większy niż dzień, w którym chcesz. Jeśli jest większy, chcesz użyć w przyszłym tygodniu. Jeśli jest mniejsza, możesz użyć tego tygodnia w poniedziałek lub czwartek.

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

Następnie chcesz rozwiązania, które dadzą Ci „w poniedziałek następnego tygodnia”, niezależnie od tego, gdzie jesteś w bieżącym tygodniu. W skrócie, chcesz najpierw przejść do następnego tygodnia, używając moment().add(1, 'weeks'). Gdy będziesz w przyszłym tygodniu, możesz wybrać dzień, który chcesz, używając moment().day(1).

Razem:

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

Zobacz https://stackoverflow.com/a/27305748/800457

5

moment().day() poda numer odnoszący się do dnia tygodnia.

Co jeszcze lepsze: moment().day(1 + 7) i moment().day(4 + 7) otrzymają odpowiednio w następny poniedziałek, w następny czwartek.

Zobacz więcej: http://momentjs.com/docs/#/get-set/day/

+1

Niestety, tak nie jest. Jeśli dzisiaj jest wtorek 26, moment(). Dzień (1) zostanie zwrócony w poniedziałek 25 - moment(). Dzień (8) zwraca następny poniedziałek. –

2

IMHO bardziej elegancki sposób:

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

może być użyte, aby każdy następny dzień w dni powszednie od teraz (lub dowolną datę) po

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

Oto przykład następny poniedziałek:

var chosenWeekday = 1 // Monday 

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

Przepraszam, ale to nie jest prawda. Twój pierwszy przykład da poniedziałek bieżącego tygodnia. Jeśli jest już wtorek, na przykład da ci to w ubiegły poniedziałek. –

+0

Masz rację, że naprawiłeś @ShannonPoole – softcode

+0

@ShannonPoole Naprawiono thx za wskazanie – softcode

2

uzyskać następnego poniedziałku użyciu chwili

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

Czy to nie zależy od dnia, który jest uważany za początek tygodnia w używanym locale? – jorisw

+1

Począwszy od wersji 2 @jorisw 'startOf (" tydzień ") używa tygodnia rozpoczęcia świadomości tygodnia" – AshUK

+1

i '.startOf ('isoWeek')' ISO 8601 określa, że ​​liczby w dni robocze, od 1 do 7, począwszy od poniedziałku i kończąc na niedzielę – AshUK

0

Oto rozwiązanie, aby znaleźć najbliższy poniedziałek, czyli dzisiaj, czy jest Poniedziałek:

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