From 39fcf6c0e01549366982086218c258d1cef44622 Mon Sep 17 00:00:00 2001 From: sergey yakushonak Date: Wed, 14 Aug 2024 12:16:24 +0300 Subject: [PATCH] Update calendar.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit корректировка $wday = date('N', mktime(0, 0, 0, $month, 1, $year)); для первого дня месяца, а не для текущей даты --- date/calendar.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/date/calendar.php b/date/calendar.php index 39794fd..a6c67ba 100644 --- a/date/calendar.php +++ b/date/calendar.php @@ -7,7 +7,14 @@ function makeCal(int $year, int $month) : array { // Получаем номер дня недели для 1 числа месяца. - $wday = date('N'); + // Если необязательный параметр timestamp функции date(string $format, ?int $timestamp = null): string не указан, + // то date('N') выводит не номер дня недели для 1 числа, а для текущего дня, когда делается выполнение сценария + // Поэтому для корректного представления календаря нужно добавить вторым параметром mktime(0, 0, 0, $month, 1, $year) + // Тогда makeCal будет выводить корректный календарь именно за текущий месяц + // Такая же неточность есть в книге/репозитории PHP7 + // PS - возможно я не прав, и на момент издания книг функция date работала по другому))) + + $wday = date('N', mktime(0, 0, 0, $month, 1, $year)); // Начинаем с этого числа в месяце (если меньше нуля // или больше длины месяца, тогда в календаре будет пропуск). $n = - ($wday - 2);