Skip to content

Instantly share code, notes, and snippets.

@oliverfernandez
Created October 20, 2021 16:01
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save oliverfernandez/a670aa9d1d51563316ed41bc935f047a to your computer and use it in GitHub Desktop.
Save oliverfernandez/a670aa9d1d51563316ed41bc935f047a to your computer and use it in GitHub Desktop.
const FIRST_MONTH_OF_THE_YEAR = 0;
const FIRST_DAY_OF_THE_MONTH = 1;
const DAYS_IN_A_WEEK = 7;
const THURSDAY_DAY_OF_THE_WEEK = 4;
const SUNDAY_DAY_OF_THE_WEEK = 7;
const TEN_DAYS_MILISECONDS = 86400000;
export type WeekOfYear = {
week: number;
year: number;
};
/**
* @see https://en.wikipedia.org/wiki/ISO_week_date
* @see https://stackoverflow.com/questions/6117814/get-week-of-year-in-javascript-like-in-php
*/
export function getWeekOfYear(date: Date): WeekOfYear {
const dateUTC = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
const nearestThursday = new Date(Date.UTC(
dateUTC.getFullYear(),
dateUTC.getMonth(),
dateUTC.getDate() + THURSDAY_DAY_OF_THE_WEEK - (dateUTC.getUTCDay() || SUNDAY_DAY_OF_THE_WEEK)
));
const firstDayOfYear = new Date(Date.UTC(
nearestThursday.getFullYear(),
FIRST_MONTH_OF_THE_YEAR,
FIRST_DAY_OF_THE_MONTH
));
const weekNumber = Math.ceil(
(((nearestThursday.getTime() - firstDayOfYear.getTime()) / TEN_DAYS_MILISECONDS) + 1) / DAYS_IN_A_WEEK
);
return {
week: weekNumber,
year: nearestThursday.getUTCFullYear()
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment