How do I get the number of weeks between a given date and (weekofyear, year) tuple? Preferably using momentjs.
function getWeeksBetweenStartDate(weekOfYear, year)
const date = moment().set({
year: 1982,
month: 3,
day: 18,
hour: 0,
minute: 0,
second: 0,
});
const weeksSinceDate =
moment()
.year(year)
.isoWeek(weekOfYear)
.day(0)
.hour(0)
.minute(0)
.subtract(date)
.weeks() ;
}
function getWeeks(date) {
return getWeeksBetweenStartDate(date.isoWeeks(), date.year());
}
getWeeks(
moment().set({
year: 1982,
month: 3,
day: 21,
hour: 0,
})
) // returns 0
getWeeks(
moment().set({
year: 1982,
month: 3,
day: 23,
hour: 0,
minute: 0,
})
) // returns 1
Even though the two example dates are part of same week, a different week delta is returned.
There are several mistakes in the code I think:
.subtract(date) in getWeeksBetweenStartDate, after subtraction, the date will become nearby 1970 (The UTC epoch). Instead, you shouldisoWeeks method, because in isoWeeks, Monday is the beginning of a week.moment.locale('us') at the beginning, to ensure a week always begins at Sunday.The following maybe the correct code you expect:
moment.locale("us")
function getWeeksBetweenStartDate(date) {
const weeksBegin = moment().set({
year: 1982,
month: 3,
day: 18,
hour: 0,
minute: 0,
second: 0,
}).weeks();
const weeksEnd = date.weeks();
return weeksEnd - weeksBegin;
}
function getWeeks(date) {
return getWeeksBetweenStartDate(date);
}
console.log(getWeeks(
moment().set({
year: 1982,
month: 3,
day: 21,
hour: 0,
})
) // returns 0
,
getWeeks(
moment().set({
year: 1982,
month: 3,
day: 23,
hour: 0,
minute: 0,
})
) // returns 1
)