Получить неделю квартала используя объект Date - PullRequest
1 голос
/ 28 сентября 2019

Как получить неделю квартала , используя new Date()?

Например, 27.09.2009, мы находимся в 3 квартале и на последней неделе месяца, поэтому weekOfQuarter = 13.

Допустим, формат недели ISO8601: с понедельника по воскресенье.

Квартал определяется на уровне месяца (3 месяца), причем неделя начинается с понедельника.Месяц может иметь до 6 недель в этом случае.Например, текущий месяц 9/2019 начался в воскресенье, так что это неделя 1, сегодня 9/28 - это неделя 5, 9/30 - неделя 6.

1 Ответ

2 голосов
/ 28 сентября 2019

Не полностью протестирован на возможные крайние случаи, но ... кажется, работает

const date = new Date('2019-09-27T00:00:00Z');
const startOfQuarter = new Date(date);
startOfQuarter.setUTCDate(1);
const month = startOfQuarter.getUTCMonth();
startOfQuarter.setUTCMonth(month - month%3);
const dowOfFirstDayInQuarter = (startOfQuarter.getUTCDay() - 1) % 7;
const daysToFirstMondayInQuarter = (7 - dowOfFirstDayInQuarter) % 7;
const daysSinceFirstMondayInQuarter = parseInt((date - startOfQuarter) / 86400000, 10) - daysToFirstMondayInQuarter;
const weekOfQuarter = parseInt(daysSinceFirstMondayInQuarter / 7, 10) + 1;
console.log(`week of quarter = ${weekOfQuarter}`);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...