Ich erstelle einen Kalender, in dem ich Wochen in Tabellenform drucke. Eine Voraussetzung ist, dass ich die Wochen entweder am Montag oder am Sonntag beginnen kann, je nach Benutzeroption. Es fällt mir schwer, die isoWeekday- Methode von moment zu verwenden.
// Start of some date range. Can be any day of the week.
var startOfPeriod = moment("2013-06-23T00:00:00"),
// We begin on the start of the first week.
// Mon Tues Wed Thur Fri Sat Sun
// 20 21 22 23 24 25 26
begin = moment(startOfPeriod).isoWeekday(1); // will pull from user setting
console.log(begin.isoWeekday()); // 1 - all good
// Let's get the beginning of this first week, respecting the isoWeekday
begin.startOf('week');
console.log(begin.isoWeekday()); // 7 - what happened ???
// Get column headers
for (var i=0; i<7; i++) {
console.log(begin.format('ddd')); // I want Monday first!
begin.add('d', 1);
}
BEARBEITEN Ich habe falsch verstanden, was isoWeekday
tatsächlich geschah. Ich dachte, es würde die Variable "Welcher Wochentag ist der erste Wochentag" gesetzt (die nicht existiert). Was es tatsächlich tut, ist einfach den Wochentag zu ändern, genau wie moment.weekday()
, aber verwendet einen Bereich von 1-7 anstelle des Bereichs 0-6.
javascript
momentjs
Sparer
quelle
quelle
startOf('week')
hängt vom aktuellen Gebietsschema ab, in dem der Sonntag in Ihrem Fall offensichtlich den Beginn der Woche markiert.startOf('iweek')
wird den ISO-Start der Woche bekommen, der Montag ist. Aber Sie haben Recht, ich habe keine Dokumentation auf der offiziellen Website gefunden ...isoweek
.isoWeek
, mit einem Großbuchstaben W, in der neuesten VersionRufen Sie
startOf
vorher anisoWeekday
.Arbeitsdemo
quelle
Auf diese Weise können Sie den ersten Wochentag einstellen.
moment().weekday(1);
Stellen Sie sicher, dass Sie es anstelle von moment.isoWeekday (1) verwenden.quelle
Ich dachte, ich würde dies für zukünftige Blicke hinzufügen. Es wird immer sicherstellen, dass sein Montag bei Bedarf auch verwendet werden kann, um immer Sonntag zu gewährleisten. Für mich brauche ich immer Montag, aber lokal hängt von der verwendeten Maschine ab, und dies ist eine einfache Lösung:
quelle
Hier ist eine allgemeinere Lösung für einen bestimmten Wochentag. Arbeitsdemo auf jsfiddle
quelle
Für diejenigen, die
isoWeek
die Standardeinstellung sein möchten , können Sie das Verhalten des Moments als solches ändern:Jetzt können Sie einfach verwenden,
someDate.startOf('week')
ohne sich Sorgen machen zu müssen, dass Sie Sonntag bekommen oder darüber nachdenken müssen, ob Sieisoweek
oder verwenden möchtenisoWeek
usw.Außerdem können Sie dies in einer Variablen wie speichern
const period = 'week'
und sicher insubtract()
oderadd()
Operationen verwenden, zmoment().subtract(1, period).startOf(period);
. Dies wird nicht mit Periode seinisoWeek
.quelle