2016-04-25 12 views
1

Vom docs for Moment.js unterscheidet, heißt es moment().startOf('isoWeek') Sätze auf den ersten Tag der Woche nach ISO 8601.Moment.js Woche Anzahl von MySQL

Vom wikipedia page for ISO 8601, heißt es in der ersten Woche (unter anderem äquivalente Definitionen ist): Die erste Woche mit der Mehrheit (vier oder mehr) ihrer Tage im Startjahr.

Aus der docs for MySQL, heißt es WEEK(date, 3) gibt eine Woche (1-53) mit Montag als erster Tag der ersten Woche mit 4 oder mehr Tagen in diesem Jahr.

Von dem, was ich sagen kann, sind dies alle äquivalenten Definitionen einer Woche, aber sie nicht ineinandergreifen.

Meine MySQL-Datenbank (v5.6.17) me 201616 für SELECT YEARWEEK('2016-4-20',3)

Mit Moment.js gibt (v2.10.3) im Browser mich Mon Apr 11 2016 für moment().year(2016).week(16).startOf("isoweek")

Die gibt es nicht in der gleichen Woche, und ich kann nicht herausfinden warum.

+0

Der 11. April 2016 ist in der Tat der ISO-Start der 15. Woche 2016 und der 20. April ist der 16. April (obwohl Montag 18 der ISO-Start dieser Woche ist). Ich denke deine Syntax ist falsch: 'moment ('2016-W16')' setzt ein Datum für 2016-04-18, das ist Montag zu Beginn der 16. Woche. – RobG

Antwort

3

Wenn Sie .week() anrufen, stellen Sie die "locale" -Woche ein (ich habe keine Ahnung, wie moment.js das funktioniert), aber wahrscheinlich ist der erste Tag Sonntag. Wenn Sie dann .startOf('isoweek') anrufen, erhalten Sie dann den ISO-Start dieser Woche, der der vorherige Montag ist.

Wenn Sie ISO verwenden möchten, müssen Sie ISO-Methoden verwenden, so:

moment().year(2016).isoWeek(16).startOf('isoweek'); 

ein Moment Objekt für 2016-04-18T00: 00: 00

Oder eine Zeichenfolge verwenden:

moment('2016-W16') // 2016-04-18T00:00:00 

die standardmäßig auf ISO Woche Nummerierung und Beginn der Woche.

+0

Sollten Sie 'isoWeekYear' anstatt' Jahr' einstellen? Zum Beispiel könnte das ISO-Jahr 2015 Anfang 2016 sein. – Brendon

+0

@ Brendon-Ich weiß nicht, warum die OP das Jahr einstellte, ich wies nur auf die Unterschiede. Einstellung * isoWeekYear * setzt den Tag auf den gleichen Tag in der entsprechenden Woche des Jahres. Um den 1. Januar herum kann das Datum um etwa 12 Monate verschoben werden, z. 'moment ('2016-01-01'). isoWeekYear (2016) .format()' gibt 2016-12-30, seit Fr 1 Jan 2016 war in ISO Woche 53 von 2015 und die Einstellung der ISO-Jahr 2016 verschiebt es auf Fr in der Woche 53 von 2016, welche am 30.12.2016 ist. – RobG

+0

Ich weiß auch nicht, was die OPs vorhaben, aber er erwähnte die 'YEARWEEK' Funktion von MySQL, also ist er vermutlich daran interessiert, das weekYear eher als das Jahr zu setzen. Selbst wenn das OP nicht die ISO-Standard-Wochen- und Wochenzahlen verwendet, müsste er den Moment # weekYear statt # year verwenden. – Brendon

Verwandte Themen