2015-12-27 2 views
14

Ich muss mit einer Logik arbeiten, die Woche am Montag (nicht am Sonntag) beginnt.Wie finde ich letzten Montag mit momentjs?

Es gibt eine Funktion Beginn der Woche kann ich verwenden:

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

Allerdings, wenn sein Sonntag, ich brauche Datum der letzten Woche zu verwenden, und fügen Sie 1 Montag zu erhalten.

Ich hoffe, es ist einfacher, nur "letzten Montag" zu bekommen, egal was das Datum ist.

Antwort

24

fand ich die Antwort (documented), aber es ist ein isoWeek, die die Woche am Montag statt Sonntag beginnt.

Anfang Woche am Sonntag:

moment().startOf('week'); 

Beginn der Woche am Montag:

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

Es ist dokumentiert [hier] (http://momentjs.com/docs/#/manipulating/start-of/). –

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

finden Sie in den offiziellen Dokumente here

+0

Es Rückkehr Sonntag. – jcubic

+0

Diese Beispiele, obwohl in den Dokumenten, sind wahrscheinlich nicht, was das OP sucht. Siehe [Problem # 2522] (https://github.com/moment/moment/issues/2522). –

2

Dunno über moment.js, aber in einfachen Javascript Sie die vorherige Montag, indem sie die Tageszahl bekommen, es zu 7 Einstellung, wenn es Sonntag ist, dann ist die subtrahieren Tagesnummer minus eins vom Datum. Wenn der Tag Montag ist, wird dasselbe Datum zurückgegeben.

z.B.

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

+0

Das ist wirklich gut. Es wird jedoch am selben Tag zurückgegeben, wenn heute ein Montag ist. Das könnte wünschenswert sein, aber das OP hat das nicht wirklich spezifiziert. Wenn heute Montag ist und du mich für "letzten Montag" fragst, werde ich an den einen vor sieben Tagen denken, nicht an den heutigen Tag. –

+0

Ja, das hängt von den Anforderungen ab. Die meisten Verwaltungssysteme, mit denen ich gearbeitet habe, würden das gleiche Datum haben wollen, wenn es ein Montag wäre, aber sozial erwarten die Leute das vorhergehende. Braucht nur ein bisschen mehr Logik, wenn also '1 - (d.getDay() || 7)' zu '0' auswertet, gebe '-7' zurück. – RobG

1

Um die letzten Montag zu finden verwenden nur

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

Oder Locale Aware Version

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

'Moment(). Wochentag (-7)' hinzugefügt in Version 2.1.0 –