Я пытаюсь сохранить в MySQL Дата() выставить последовательную дату года 2037.
Например: 2065-12-01
Проблема в том, что поле возвращается: 1969-12-31
Как правильно записать эти значения в БД? Должен ли я использовать VARCHAR?
Я вычисляю date
значение поля вот так:
$future_date = date('Y-m-d', strtotime("+$number_years_to_add years"));
Вы, вероятно, используете поле метки времени для хранения дат, а не поле даты и времени.
Смотрите документацию по MySQL на типы данных datetime, в частности:
Тип DATE используется для значений с частью даты, но без части времени.
MySQL извлекает и отображает значения DATE в формате «ГГГГ-ММ-ДД».
поддерживаемый диапазон от «1000-01-01» до «9999-12-31».Тип DATETIME используется для значений, которые содержат как дату, так и время
частей. MySQL извлекает и отображает значения DATETIME в формате «ГГГГ-ММ-ДД»
Формат ЧЧ: ММ: СС. Поддерживаемый диапазон: «1000-01-01 00:00:00» до
9999-12-31 23:59:59.Тип данных TIMESTAMP используется для значений, которые содержат как дату, так и
части времени TIMESTAMP имеет ряд ‘1970-01-01 00:00:01’ UTC до
‘2038-01-19 03:14:07’ UTC.
Мне кажется, что вы используете PHP date
а также strtotime
вещи на 32-битной платформе. Эти функции превращаются в тыкву, как карета Золушки, в 03:14:07 UTC 19 января 2038.
Вы можете проверить новый PHP DateTime класс или обновить до 64-битной реализации PHP.
Кроме того, прочитайте это. Доступ к датам в PHP после 2038 года
(Спасибо за обнаружение этой проблемы с предварительным уведомлением за 22 года. Другие не будут.)