Je crée un calendrier dans lequel j'imprime des semaines dans un format tabulaire. Une condition est que je puisse commencer les semaines le lundi ou le dimanche, selon certaines options de l'utilisateur. J'ai du mal à utiliser la méthode isoWeekday du moment .
// 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);
}
EDIT J'ai mal compris ce que isoWeekday
faisait réellement. Je pensais qu'il définissait la variable "quel jour de la semaine est le premier jour de la semaine" (qui n'existe pas). En fait, il change simplement le jour de la semaine, tout comme moment.weekday()
, mais utilise une plage de 1 à 7 au lieu de 0 à 6.
javascript
momentjs
sauveur
la source
la source
startOf('week')
dépend de la localisation actuelle où dimanche marque évidemment le début de la semaine dans votre cas.startOf('iweek')
obtiendra le début ISO de la semaine, qui est lundi. Mais vous avez raison, je n'ai trouvé aucune documentation sur le site officiel ...isoweek
.isoWeek
, avec un grand W, dans la dernière versionAppelez
startOf
avantisoWeekday
.Démo de travail
la source
De cette façon, vous pouvez définir le premier jour de la semaine.
Assurez-vous de l'utiliser avec
moment().weekday(1);
au lieu de moment.isoWeekday (1)la source
j'ai pensé ajouter ceci pour tous les futurs potes. Il veillera toujours à ce que son lundi si nécessaire, puisse également être utilisé pour toujours assurer le dimanche. Pour moi, j'ai toujours besoin du lundi, mais le local dépend de la machine utilisée, et c'est une solution facile:
la source
Voici une solution plus générique pour un jour de semaine donné. Démo de travail sur jsfiddle
la source
Pour ceux qui veulent
isoWeek
être la valeur par défaut, vous pouvez modifier le comportement du moment en tant que tel:Maintenant, vous pouvez simplement utiliser
someDate.startOf('week')
sans vous soucier que vous obtiendrez le dimanche ou que vous deviez penser à utiliserisoweek
ouisoWeek
etc.De plus, vous pouvez stocker cela dans une variable comme
const period = 'week'
et l'utiliser en toute sécurité danssubtract()
ouadd()
opérations, par exemplemoment().subtract(1, period).startOf(period);
. Cela ne fonctionnera pas avec la périodeisoWeek
.la source