2016-04-29 3 views
0

ich mit Javascript die Wochen beginnen und Enddatum erhalten müssen/moment.jsHolen Sie sich die Wochen beginnen und Enddatum von Jahr und Kalenderwoche mit Javascript

Als Eingang ich habe zwei Werte: Jahr und Woche, das ist die isoweek von moment.js

Jahre = '2016' Woche = '1'

sollte die 2016.01.04 und 2016.10.01 geben Sie mir

, wo das Datum der Deutsch-Format Moment hat() .format ('TT.MM.JJJJ');

+1

Welche Lösung haben Sie selbst getestet? –

+0

Moment (neues Datum (Jahr, 0, 1)). IsoWoche (Woche) .startOf ('isoweek'). Format ('DD.MM.YYYY'); ist, was ive versuchte –

+0

, aber ich denke, ich habe eine Lösung gefunden: moment(). Jahr (year.val()). isoWeek (week.val()). startOf ('isoweek'). Format ('DD.MM .YYYY ') –

Antwort

1
moment([2016]).isoWeek(1).startOf('isoWeek').format('DD.MM.YYYY') // "02.01.2015" 
+0

Bitte geben Sie keine reinen Code-Antworten ein. Mach etwas mehr Mühe. –

3

Die Lösung aus Ihrem Kommentar wird ein falsches Ergebnis auf 01.01.2017 produzieren:

moment([2017,0,1]).year(2017).isoWeek(1).startOf('isoweek').format('DD.MM.YYYY'); 
// = '04.01.2016' 

Dieser ist stabiler:

//var year = 2016; 
//var week = 1; 
var startDate = moment([year, 5, 30]).isoWeek(week).startOf('isoweek'); 
var endDate = moment(startDate).endOf('isoweek'); 
startDate.format('DD.MM.YYYY'); // = '04.01.2016' 
endDate.format('DD.MM.YYYY'); // = '10.01.2016' 

Erklärung: Wenn Sie den Moment Instanz initialisieren mit einem Datum von Woche 53 des Vorjahres in Verbindung mit isoWeek oder week, das Jahr compon Ent dieser Moment-Instanz wird auf das vorherige Jahr gesetzt. Alle zusätzlichen Momentenmethoden arbeiten dann im "falschen" Jahr. Verwenden Sie daher moment([year, 5, 30]), um die Momentinstanz zu initialisieren. Jeder andere Tag nach dem 3. Januar funktioniert natürlich auch für 2016, nur die wenigen Tage, die zur Woche 53 des Vorjahres gehören, verursachen dieses Problem.