@barsik22

Как исправить ошибку при переходе на php8 Битрикс [TypeError] Argument #5 ($day) must be of type ?int, string given (0)?

После перехода выдает такую ошибку

[TypeError] 
mktime(): Argument #5 ($day) must be of type ?int, string given (0)
/home/c/crikon8y/ru.reisennachrussland.com/public_html/local/templates/fortuna/components/bitrix/catalog/catalog1/bitrix/catalog.section/.default/template.php:32


Строка кода 32:
$de = mktime(0,0,0,$de[1],$de[0],$de[2]);
  • Вопрос задан
  • 379 просмотров
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Прочитать и перевести текст ошибки. Дальше отсчитать пятый аргумент и проверить, что вы в него передаёте. Если число в формате строки, то достаточно просто привести его к int через стандартный каст языка. Если же там реально какая-то строка, то разбираться откуда она берётся в том месте, где должно быть число.
Ответ написан
Stalker_RED
@Stalker_RED
Открываем документацию по mktime(), видим, что эта функция принимает только тип int в качестве аргументов. (впрочем, можно и не ходить в документацию, об этом же прямо в тексте ошибки написано).

Смотрим что в нее передается в коде - три нуля, с ними все хорошо. Дальше какие-то значения из массива $de. Смотрим что там в этом массиве, он создается на пару строк выше:$de = explode(".", $date_end);
Смотрим документацию по функции explode() (если вы забыли, что это одна из строковых функций), и видим, что она возвращает массив строк. (Ну и да, об этом тоже прямо в тексте ошибки написано, что передана строка).

Вспоминаем чем отличается строка от числа и как преобразовать одно в другое.

Было сложно? Нет, не особо. Но таких ошибок в движке битрикса могут быть сотни или тысячи. Вот в чем сложность.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы