Вам необходимо решить, хотите ли вы, чтобы трехнедельный период начинался в воскресенье до 1 января 1970 г. (28/12/69) или после.Например, к какому воскресенью 14 января 1970 года?Затем вы можете рассчитать разницу между четвергом или предыдущим воскресеньем или следующим воскресеньем и сложить или вычесть (в зависимости от принятого вами решения) это округленное решение.
Вот вариант вашей функции, который также требуетдата в качестве входных данных для тестирования.
function roundWeek(weeks, d) {
var current = new Date(d);
var first_sunday = 60 * 60 * 24 * 4 * 1000 // seconds between Sunday and Thursday
const WEEK_IN_MS = 60 * 60 * 24 * 7 * 1000; // week in ms
var index = Math.floor((current.getTime() / (WEEK_IN_MS * weeks)));
console.log(`${weeks}-week periods from ${d.getMonth()+1}/${d.getDate()}/${d.getFullYear()} ${index}`)
var startOfPeriod = new Date(index * WEEK_IN_MS * weeks - first_sunday);
console.log("1st day of period:", startOfPeriod);
}
// round to three weeks starting Sunday before Jan 1 1970
roundWeek(3, new Date('January 2, 1970')); // Dec 28, 1968
roundWeek(3, new Date('January 14, 1970')); // Dec 28, 1968
roundWeek(3, new Date('January 22, 1970')); // next three weeks
roundWeek(3, new Date('May 16, 2018')); // since today. Sundaay May 6
Поскольку високосные годы не меняются, продолжительность недели не имеет значения.