Что выбрать в PHP для хранения даты - datetime или timestamp
Рубрики: php ; Метки: datetime, timestamp, date ; 22.11.2009Сегодня, покопавшись в настройках php, выяснил, что генерируются предупреждения при использовании старых функций date для форматирования даты в формате unix timestamp. В блоголёте для хранения даты я как раз использовал timestamp, то бишь целое число. Меня практически полностью устраивает timestamp, если бы не одно абстрактное обстоятельство - эпоха ЮНИКС заканчивается в 2038 году. К тому времени, вероятно везде будет как минимум 64 разрядные платформы и не возникнет проблем.
С другой стороны сам php стал генерировать предупреждения, недвусмысленно намекая на класс datetime. Покурил я доку про этот класс. Не впечатлен. Например мне удобно использовать timestamp для функции strftime, которая не имеет аналога для datetime, если я не ошибаюсь. Также для datetime недоступны простые арифметические операции сравнения - больше и меньше. Это второй существенный минус.
А собственно вопрос - а почему не используется тип float для хранения даты. Как например в дельфи, где целая часть - это дата (в смысле дни), а дробная - время (часы, минуты и т.д.). Тогда не было этих дурацких ограничений. не думаю, что так уж сложно было бы расширить имеющиеся функции форматирования для работы с таким форматом, но при этом остались бы в силе все арифметические операции с датой.
Самому писать, считаю даже преступлением, так как это только лишний головняк, и не принесет никаких очевидных бонусов.
Подписаться на RSS комментариев к этой записи
Ранее Почему нет музыкальных центров с интернетрадио | Позже Электронные деньги - что выбрать
05.12.2009 в 12:40
Храню в Date/Datetime в БД, потому как визуально можно посмотреть, когда что было через phpMyAdmin. В уме переводить таймстампы еще не научился. При необходимости сравнить в PHP делаю strtotime.
05.12.2009 в 13:17
То есть все равно переводишь в таймстамп, а в бд это уже вторично
17.01.2010 в 12:22
timestamp изменяется каждый раз при модификации строки содержащей этот timestamp. учтите это.
17.01.2010 в 13:03
timestamp во многом плох - было бы проще, если например использовались для операций с датой например числа с плавающей точкой, но так или иначе я в бд не использую таймстамп
02.02.2010 в 17:03
Только timestamp. Основное преимущество - с ним можно делать любые фокусы, какие только угодно.
Только в БД хранить timestamp в виде longint или int.
02.02.2010 в 20:56
timestamp имеет ограничение до 2038 года, а в бд удобно пользоваться функциями даты, например конструкция вида
where month(posted) = 1
с таймстампом это будет сложнее