Стоит ли бояться проблемы 2038 года и не использовать timestamp?
Доброго вечера.
Как известно, формат TIMESTAMP имеет предел, который очень скоро наступит, и для некоторых секторов веб-разработки (например, недвижимость) это может быть весьма критично. В то же время, отказываться от этого формата в пользу константного DATETIME с возможными плясками вокруг временных зон и их конвертации друг в друга не хочется.
Стоит ли избегать использования этого формата сейчас? И самое главное - как определить, поддерживаются ли в системе (версии ПO, PHP, драйверов БД и прочего) 64-битные timestamp'ы, лишенные фактического ограничения?
Александр А: а если на сайте даты больше 2038? Например, банковская сфера, или недвижимость. Допустим, драйвер БД поддерживает такие большие значения, и все запишется, а при обработке какой-то дряхлый модуль этого не поймет и выдаст 1901 год, этот баг будет практически невозможно отловить.
Александр А: есть, узнать, поддерживается ли в экосистеме проекта 64-битные timestamp's. В windows 8 и выше гарантированно поддерживаются, например, но это не веб.
Большинство веб проектов закрываются в первый год. В следующий ещё и в последующие годы. Если ваш доживет до 2038 это будет чудо, ещё с большей вероятностью не вы будете его рефакторить через 22 года(если он доживет). К этому времени его с 100% вероятностью перепишут на чем то другом, тут не знаешь чего через год два от веба ждать, а вы в такую даль смотрите.
В том-то и суть, что не в даль. Если человек сейчас введет дату 2040 год (срок закрытия счета, или дата окончания инвестиций), то в худшем случае будут problemes.
Думаю, что поле - нужно делать обычным способом timestamp для базы данных (никаким не пользовательским!).
Потом сервер mysql и сам PHP проапдейтят и они сами расширят ограничения и в код, и в базу не надо будет лезть и ничего там править.
Вы вспомните, какая разработка была 20 лет назад. Да 20 лет назад люди об интернете не знали, только "избранные". Представьте, что будет через 20 лет? Волноваться о проблеме не стоит.
А если на сайте нужно ввести дату - используйте поле date в MySQL, оно поддерживает большой диапазон дат.