Вы заменяете переменную, которую используете в:
$date = strtotime($year . "-" . $month . "-" . ($i + 1));
Итак, во 2-й день месяца вместо попытки анализа 2019-1-2
вы анализируете 2019-Jan-1
. Я не уверен, почему, но когда вы используете этот формат с однозначным днем, он всегда анализируется, как если бы он был 2019-01-01
.
Решение состоит в том, чтобы использовать другую переменную.
function calendarDay ($month, $year)
{
$num = cal_days_in_month(CAL_GREGORIAN, $month, $year);
$today = strtotime(date("Y-m-d"));
$result = array();
$str = "";
$strMonth = "";
for ($i = 0; $i < $num; $i++) {
$date = strtotime($year . "-" . $month . "-" . ($i + 1));
$day=strftime("%a", $date);
$monthName = strftime("%b", $date);
if ($today == $date) {
if ($day == "Sat" || $day == "Sun") {
$str .= "<th style='background-color:mediumseagreen'>" . $day. "</th>";
$strMonth = $strMonth . "<th style='background-color:mediumseagreen'>".($i + 1) . "-" . $monthName." ". "</th>";
}
else {
$str .= "<th style='background-color:#888888'>" . $day. "</th>";
$strMonth = $strMonth . "<th style='background-color:#888888'>".($i + 1) . "-" . $monthName." ". "</th>";
}
}
else if ($today != $date) {
if ($day == "Sat" || $day == "Sun") {
$str .= "<th style='background-color:mediumseagreen'>" . $day. "</th>";
$strMonth = $strMonth . "<th style='background-color:mediumseagreen'>".($i + 1) . "-" . $monthName." ". "</th>";
}
else {
$str .= "<th>" . $day. "</th>";
$strMonth = $strMonth . "<th>".($i + 1) . "-" . $monthName." ". "</th>";
}
}
$result = array_merge($result, array("Month" => $strMonth));
$result = array_merge($result, array("Day" => $str));
}
return $result;
}