我习惯使用time()
将db中的日期保存为INT(11)。
考虑到time()的限制,有没有更好的方法来保存它?
我不想使用数据库自己的DATE类型(以及所有db自己的日期函数)。
由于
答案 0 :(得分:5)
好的,从评论中我知道使用time()的问题在于我们希望将01/01/1970以外的日期表示为/ 2038范围。
在这种情况下,我认为最好将数据库的日期格式化为YmdHis
,存储在BIGINT中(如果不需要时间,则只存储在INT中的Ymd
)。您可以使用date_create("now")->format($fmt)
代替time()
,其中$ fmt的日期为“Ymd”,日期+时间为“YmdHis”
这给出了922,337,203AD的最新日期和最早的-922,337,203BC时间,或者在INT中没有时间的214,748AD到-214,748BC。
答案 1 :(得分:1)
使用$_SERVER['REQUEST_TIME']
。
它对于整个请求是常量,并且比time()
(和UNIX_TIMESTAMP()
)更快,因为它只需要数组查找而不是函数调用。
答案 2 :(得分:0)
避免在DB中管理标准时间是很奇怪的。您是否考虑过所有可能的方法来表示正确格式化的日期字段?
MySQL::Date and time functions
PostgreSQL::functions datetime
在某些情况下,以正确的格式存储日期会更灵活,更有效。
答案 3 :(得分:0)
日期时间对于调试和阅读更具可读性,但与日期格式的时间戳相同,查询中的NOW关键字使事情干净整洁,尤其是如果您不需要从查询中分离变量:
INSERT INTO `mytable` (`id`,`title`,`created`) VALUES (NULL, 'my awesome record', NOW());
答案 4 :(得分:0)
您可以将内置数据库类型用于日期和时间,或者您可以在表中创建三个整数列并将日期保存为整数。无论什么有效,都很容易处理。