2017-03-06 2 views
0

Ich versuche, ein Datumsraster für einen Kalender zu erstellen. Ich habe es funktioniert, wenn Sonntag als "erster Tag der Woche" bezeichnet wird.Verwenden des Moments isoWeekday zum Erstellen eines Datumsrasters

Mit Sonntag als Starttag der Woche (in Betrieb)

der Monat März gegeben, 2017 würde das Gitter mit Sunday, February 26, 2017, beginnt und mit Saturday, April 1, 2017 beenden. Dies ist, wie ich es tue:

let now = moment('2017/03/06/', 'YYYY/MM/DD'); 
 
let startOfGrid = now.clone().startOf('month').startOf('week'); 
 
let endOfGrid = now.clone().endOf('month').endOf('week'); 
 

 
console.log(startOfGrid.format()); // Sunday, Febrary 26, 2017 
 
console.log(endOfGrid.format()); // Saturday, April 1, 2017
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

ich dann diese beiden Daten abgehen in die Tage zu füllen, zwischen denen mir alle Termine für einen Kalender Raster gibt.


Verwendung Samstag oder Montag als Starttag der Woche (nicht funktioniert)

Ich brauche die Woche auf beiden Samstag anfangen, unterstützen zu können, oder Montag, aber ich kann nicht scheinen zu Holen Sie sich die richtigen Einstellungen, und die Ergebnisse sind nicht über Monate konsistent. Lassen Sie uns Samstag als Beispiel verwenden:

Angesichts der Monat März wieder, aber Einstellung der Anfang der Woche zu saturday, und mit der startOf('isoWeek'), ich am Montag als Anfang der Woche (sollte Samstag sein):

let now = moment('2017/03/06/', 'YYYY/MM/DD'); 
 
let startOfGrid = now.clone().startOf('month').isoWeekday('saturday').startOf('isoWeek'); 
 
let endOfGrid = now.clone().endOf('month').isoWeekday('saturday').endOf('isoWeek'); 
 

 
console.log(startOfGrid.format()); // Monday, Febrary 27, 2017 
 
console.log(endOfGrid.format()); // Sunday, April 2, 2017
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

ich sollte einen Samstag als Beginn des Gitters und ein Freitag als das Ende bekommen.

Wie kann ich dies funktioniert?

Antwort

2

Nach einigen Stücken zusammengesetzt aus https://momentjs.com/docs/#/customization/ und https://momentjs.com/docs/#/i18n/changing-locale/, können Sie moment.updateLocale verwenden, um die locale Konfiguration global außer Kraft zu setzen, etwa so:

moment.updateLocale('en', { 
 
    week: { 
 
     dow: 6 //week starts on saturday 
 
    } 
 
});

Dies betrifft alle Moment selbst erstellte Objekte in die Zukunft, aber nicht die bereits geschaffenen. Alternativ können Sie Ihre eigenen locale definieren, wenn Sie etwas mehr Flexibilität wünschen:

moment.defineLocale('en-mod', { 
 
    parentLocale: 'en', 
 
    week: { 
 
     dow: 6 //week starts on saturday 
 
    } 
 
});

Beachten Sie, dass dies auch die locale global festgelegt werden, so dass Sie sofort möchten moment.locale('en'); aufzurufen zurück zu ändern Standard (oder das Gebietsschema, das Sie ursprünglich festgelegt haben).

Dann mit Ihrer benutzerdefinierten locale Definition, können Sie es auf einzelnen Moment Objekte verwenden können, d.h .: moment().locale('en-mod');

+0

Whoa ... hatte keine Ahnung von diesem. Du bist ein Mann. – KevBot

Verwandte Themen