week() renvoie le numéro de la semaine en fonction de l'année, ce que j'aimerais obtenir est le numéro de la semaine par rapport au mois. C'est possible?
Ce n'est pas intégré, mais en gros, vous pouvez soustraire le numéro de semaine du début du mois du numéro de semaine de la date en question.
function weekOfMonth(m) {
return m.week() - moment(m).startOf('month').week() + 1;
}
Notez que la fonction week
est spĂ©cifique aux paramĂštres rĂ©gionaux, donc dans certains cas, vous voudrez peut-ĂȘtre utiliser isoWeek
la place. (Voir la doc).
Si quelqu'un veut ajouter cela au moment, un PR avec la fonction ci-dessus (ou similaire) et les tests unitaires associés seraient appréciés.
Suivi dans le PR #2965. Merci!
Qu'en est-il de l'ajout de cette capacité à la fonction format
 ?
Ce n'est pas intégré, mais en gros, vous pouvez soustraire le numéro de semaine du début du mois du numéro de semaine de la date en question.
function weekOfMonth(m) { return m.week() - moment(m).startOf('month').week() + 1; }
Notez que la fonction
week
est spĂ©cifique aux paramĂštres rĂ©gionaux, donc dans certains cas, vous voudrez peut-ĂȘtre utiliserisoWeek
la place. (Voir la doc).
moment("2018-12-31") -> semaineDuMois = -48
Certaines années, week()
renverra 1 pour les derniers jours de l'année, voir #4019 . Donc, cela gùche les calculs comme @ Knjaz89 l'a mentionné.
Par conséquent, la bonne façon de calculer la weekOfMonth est :
function weekOfMonth(date) {
let weekInYearIndex = date.week();
if (date.year() !== date.weekYear()) {
weekInYearIndex = date.clone().subtract(1,'week').week() + 1;
}
const weekIndex = weekInYearIndex - moment(date).startOf('month').week() + 1;
}
weekOfMonth(moment('2018-12-31T00:00:00.000Z')); // return 6
weekOfMonth(moment('2019-01-01T00:00:00.000Z')); // return 1
Il a augmenté un indice hebdomadaire de 2020, il était difficile de calculer le nombre,
mais réglé avec l'aide de l'@eitanfr
Merci.
Certaines années,
week()
renverra 1 pour les derniers jours de l'année, voir #4019 . Donc, cela gùche les calculs comme @ Knjaz89 l'a mentionné.Par conséquent, la bonne façon de calculer la weekOfMonth est :
function weekOfMonth(date) { let weekInYearIndex = date.week(); if (date.year() !== date.weekYear()) { weekInYearIndex = date.clone().subtract(1,'week').week() + 1; } const weekIndex = weekInYearIndex - moment(date).startOf('month').week() + 1; } weekOfMonth(moment('2018-12-31T00:00:00.000Z')); // return 6 weekOfMonth(moment('2019-01-01T00:00:00.000Z')); // return 1
Pour la date du 01/02/2020, il renvoie -52, j'ai donc corrigé ce cas :
function getWeekOfMonth(dateObj) {
const date = m(dateObj);
const weekInYear = date.isoWeek();
const result = weekInYear - date.startOf('month').isoWeek();
return result < 0 ? weekInYear : result;
}
Ce n'est pas intégré, mais en gros, vous pouvez soustraire le numéro de semaine du début du mois du numéro de semaine de la date en question.
function weekOfMonth(m) { return m.week() - moment(m).startOf('month').week() + 1; }
Notez que la fonction
week
est spĂ©cifique aux paramĂštres rĂ©gionaux, donc dans certains cas, vous voudrez peut-ĂȘtre utiliserisoWeek
la place. (Voir la doc).
GĂ©nial (y)
Pour info @M7Arman ne fonctionne pas pour 2020-08-30
, votre fonction signale la semaine 4, mais nous sommes dans la semaine 6.
Pour info @M7Arman ne fonctionne pas pour
2020-08-30
, votre fonction signale la semaine 4, mais nous sommes dans la semaine 6.
@michaelhayman tu veux dire qu'on est en semaine 5 ?
Commentaire le plus utile
Ce n'est pas intégré, mais en gros, vous pouvez soustraire le numéro de semaine du début du mois du numéro de semaine de la date en question.
Notez que la fonction
week
est spĂ©cifique aux paramĂštres rĂ©gionaux, donc dans certains cas, vous voudrez peut-ĂȘtre utiliserisoWeek
la place. (Voir la doc).