Сначала нам нужен день с этой недели, поэтому, зная номер недели и зная, что у недели есть семь дней, мы собираемся сделать так, чтобы
$pickADay = ($weekNo-1) * 7 + 3;
таким образом, pickAday был бы днем в нашемжелаемая неделя.
Теперь, когда мы знаем год, мы можем проверить, какой это день.все просто, если нам нужны только даты, более новые, чем отметка времени unix. Мы получим отметку времени unix для первого дня года и добавим к ней 24*3600*$pickADay
, и все просто отсюда, потому что у нас есть отметка времени, мы можем знать, какой деньэто неделя и вычислим соответственно голову и хвост этой недели.
Если мы хотим узнать то же самое, скажем, о 12-й неделе 1848 года, мы должны использовать другой подход, поскольку мы не можем получить метку времени.Зная, что каждый год в день увеличивается на 1 значение дня недели (1 ноября прошлого года было в воскресенье, этот год - в понедельник, за исключением високосных лет, когда он продвигается на 2 дня, я полагаю, вы можете это проверить).Что бы я сделал, если бы год был старше 1970 года, чем разница между ним и необходимым годом, чтобы узнать, сколько там лет, подсчитать день недели, так как мой pickADay был частью 1970 года, перенести его обратно на один день недели для каждого,$shiftTimes = ($yearDifference + $numberOfLeapYears)%7
, в разнице.сдвиньте день назад на $ shiftTimes, тогда вы узнаете, какой день недели был в тот день в те годы назад, а затем найдите выходной и недельный хвост.То же самое можно использовать и в будущем, если это кажется проще.Попробуйте, если это работает, и скажите мне, если это не так.