I am trying to parse dates in JavaScript with the equivalent of the format %G-%V
(e.g., 2020-53
, 2021-1
, etc.) from Python's datetime
library.
My current attempt at doing so is as follows:
getWeek(date_str) {
var givenDate = new Date(date_str);
var givenYear = givenDate.getFullYear();
var startDate = new Date(givenDate.getFullYear(), 0, 1);
var days = Math.floor((givenDate - startDate) /
(24 * 60 * 60 * 1000));
var weekNumber = Math.ceil(days / 7);
var wkStart = new Date(givenDate.setDate(givenDate.getDate() - givenDate.getDay()));
var wkEnd = new Date(new Date(wkStart).setDate(wkStart.getDate() + 6));
return {"week_num": `${givenYear}-${weekNumber}`, "start_of_week": wkStart, "end_of_week": wkEnd}
}
This seems to be yielding conflicting results around end of year in some cases:
2020-12-27T00:00:00.000Z => 2020-52 (correct)
2020-12-28T00:00:00.000Z => 2020-52 (should be 2020-53)
2020-12-29T00:00:00.000Z => 2020-52 (should be 2020-53)
2020-12-30T00:00:00.000Z => 2020-52 (should be 2020-53)
2020-12-31T00:00:00.000Z => 2020-52 (should be 2020-53)
2021-01-01T00:00:00.000Z => 2020-53 (should be 2020-53)
2021-01-02T00:00:00.000Z => 2021-0 (should be 2020-53)
2021-01-03T00:00:00.000Z => 2021-1 (should be 2020-53)
2021-01-04T00:00:00.000Z => 2021-1 (correct)