вы можете использовать библиотеку дат для этого, но если вы хотите рассчитать ее, вот объясненное решение
тебе нужно знать, високосный ли это год. каждый месяц имеет 4 недели плюс несколько дней в зависимости от месяца.
например:
январь 4 недели плюс 3 дня
...
апрель 4 недели плюс 2 дня
хранить дополнительные дни для каждого месяца (может меняться только февраль, который может иметь 28 или 29 дней, в зависимости от того, високосный год или нет)
$extra_days = (january => 3, march => 3, april => 2, december => 3);
вычислите дополнительные дни февраля (0 или 1), вам нужно будет рассчитать, является ли это високосным годом ... вы можете сделать это с помощью такой операции, как ->
$your_year mod 4
что-то вроде:
if (($your_year - REFERENCE_LEAP_YEAR) mod 4 == 0) then "it's a leap year"
теперь у вас есть дополнительные дни для каждого месяца, который вы можете рассчитать. Каждый месяц имеет 4 недели, но вам нужен счетчик, чтобы узнать, отработает ли дополнительный день неделю. Например:
january = 3 extra days
-> weeks = 4 - extra_days = 3 febraury = 1 extra day
-> weeks = 8 - extra_days = 4 march = 3 extra days
-> weeks 12 - extra_days = 7
***now you have an extra week so..
-> weeks 13 - extra_days
...