Я помогал кому-то отлаживать какой-то код, в котором сообщение об ошибке было «День слишком большой». Я знаю, что это происходит по местному времени и ошибка Y2038 (большинство результатов Google, похоже, люди, имеющие дело с куки, срок действия которых истекает в будущем).
Похоже, что мы «исправили» проблему, используя время для получения текущей даты. Однако, учитывая, что ни одна из наших первоначальных дат не должна была затронуть проблему 2038 года, я скептически отношусь к тому, что мы на самом деле решили эту проблему ...
Есть ли другие случаи, когда кто-нибудь знает, где можно ударить "слишком большой день"?
ОС - это Солярис.
Пример кода - фактический код довольно большой, и человек, с которым я работаю, на самом деле не изолировал оскорбительную часть (поэтому я беспокоюсь, что «исправление» на самом деле не является исправлением). Если я смогу собрать что-то краткое, что воспроизводит проблему, я опубликую!
UPDATE
Я выделил фрагмент кода, поместил несколько операторов print во все и решил проблему ...
Обидная строка кода была:
$temp = str2time(localtime());
Это часто (но не всегда) устанавливало $ temp как undef. Оказывается, что даже когда был установлен $ temp, он не был установлен с ожидаемым значением.
Гвоздь в том, что localtime () возвращает массив в большинстве контекстов ... и это то, что мешает вызову str2time.
Изменив это на:
$ltime = localtime;
$temp = str2time($ltime);
проблема исчезнет.
Конечно, еще лучше, просто используйте:
$temp = time;