2015-12-27 8 views
14

Muszę pracować z pewną logiką, która wymaga tygodnia zaczyna się w poniedziałek (nie w niedzielę).Jak znaleźć ostatni poniedziałek za pomocą modułów pośpiesznych?

Jest początek funkcja tygodnia mogę użyć:

moment().tz('America/Los_Angeles').startOf('week').add(1, 'day')

Jednak jeśli jego niedziela, muszę korzystać z zeszłotygodniowej datę i dodać 1 aby uzyskać poniedziałek.

Mam nadzieję, że łatwiej jest dostać "ostatni poniedziałek" bez względu na datę.

Odpowiedz

24

Znalazłem odpowiedź (documented), ale nie jest isoWeek który rozpocznie się w poniedziałek w tygodniu zamiast niedzieli.

Rozpocznij tydzień w niedzielę:

moment().startOf('week'); 

Rozpocznij tydzień w poniedziałek:

moment().startOf('isoWeek'); 
+1

Jest to udokumentowane [tutaj] (http://momentjs.com/docs/#/manipulating/start-of/). –

0
// when Monday is the first day of the week 
moment().weekday(-7); // last Monday 

Patrz oficjalnych docs here

+0

Powraca w niedzielę. – jcubic

+0

Te przykłady, choć w dokumentach, prawdopodobnie nie są tym, czego szuka OP. Zobacz [nr 2522] (https://github.com/moment/moment/issues/2522). –

2

wiem o moment.js, ale w zwykły javascript można dostać poprzedniego poniedziałku dostając liczbę dni, ustawiając go na 7, czy to w niedzielę, a następnie odjąć numer dnia minus jeden od daty. Jeśli dzień przypada w poniedziałek, zwraca tę samą datę.

np.

var d = new Date(); 
 
d.setDate(d.getDate() + 1 - (d.getDay() || 7)); 
 
document.write(d)

+0

To jest naprawdę dobre. Zwraca jednak ten sam dzień, jeśli dzisiaj jest poniedziałek. To może być pożądane, ale PO tak naprawdę nie sprecyzował. IMHO, jeśli dzisiaj jest poniedziałek i pytasz mnie o "ostatni poniedziałek", będę myślał o tym 7 dni temu, a nie o bieżącym dniu. –

+0

Tak, to zależy od wymagań. Większość systemów administracyjnych, z którymi współpracowałem, chciałaby tego samego dnia, gdyby był poniedziałek, ale społecznie, ludzie oczekują tego wcześniej. Wystarczy trochę więcej logiki, więc jeśli '1 - (d.getDay() || 7)' zwróci wartość '0', zwróć' -7'. – RobG

1

Aby znaleźć ostatni poniedziałek po prostu użyć

moment().isoWeekday(-6); // ISO day of the week with 1 being Monday and 7 being Sunday. 

ani regionu wersja Aware

moment().weekday(-7); // when Monday is the first day of the week 
+0

'moment(). Weekday (-7)' added in 2.1.0 version –