【问题标题】:Time how to store it时间如何存储它
【发布时间】:2011-05-21 15:03:08
【问题描述】:

好吧,我有点困惑。我正在研究一个必须在数据库中存储一些time() 的项目。在我看来,为了更好的灵活性,我应该将它存储为时间戳,以便我可以在 2 次和其他很酷的东西之间进行操作。 但我看到(这里比其他任何地方都多)很多人以日期格式将时间存储在数据库中,遇到一些常见问题,例如:如何将日期格式转换为时间戳?或者我怎样才能将一个日期减去另一个具有不同日期格式的日期?等等

使用时间戳并稍后将其转换为时间格式(显示给用户)我错了吗? mysql数据库。

【问题讨论】:

  • 哪个是 DB? :-) Gordon 更快!
  • Mysql 数据库?有关系吗?在 php 中使用时间戳比使用日期格式字符串更有效。
  • 这取决于...不同的数据库可能有不同的存储日期的方式。如果您计划存储时间戳,那么这并不重要,因为 AFAIK 所有数据库都支持整数类型......
  • @andre MySql 中的时间戳列与整数列完全不同。

标签: php datetime timestamp date-format flexibility


【解决方案1】:

MySql supports DateTime, Date and Timestamp columns 并提供 a number of convenient functions 通过 SQL 与他们合作。我建议通读链接的手册页以选择适合您需要的手册页。

【讨论】:

    【解决方案2】:

    我倾向于以 int(10) 格式存储时间戳,因为 UNIX 时间戳总是 10 个字符长。建议使用 int 而不是 varchar 或 char,因为当您使用 SQL 的 ORDER 语法时,它不会得到错误的顺序。

    假设您想将日期转换为时间戳,您可以使用strtotimemktime,具体取决于您在做什么。

    要计算出两个时间戳之间的差异,只需将它们相减即可。

    对于时区问题,您可以使用date_default_timezone_set 将其设置为用户所在的国家/地区。当您使用 date 之类的函数时,会考虑到这一点

    【讨论】:

    • 数据库有一个不受y2k38 problem影响的本机数据类型,而存储时间戳是(因为它是一个32位数字)......
    • 大多数 Web 应用程序只能使用几年,最长可能是 5 年。只有少数应用程序需要使用 2038 年之后的时间戳。我宁愿将应用程序设计为高效而不是完全面向未来,如果它仍然存在,它总是可以在更接近时间的时候升级。
    • 正是这种想法让我们陷入了 y2k 问题。虽然我同意现在担心 y2k38 是愚蠢的,但解决方案是存在的,而且它的效率不亚于您的建议(事实上,由于日期算术是在编译的 C 中完成的,我敢说它可能效率更高)。所以没有真正的理由使用本机数据类型...
    【解决方案3】:

    如果你不知道,MySQL 支持几个日期函数,DATESUB、DATEADD 等。

    【讨论】:

    • 重点是你可以用 SQL Date/DateTime 数据类型做很多日期算术(处理时区、日期障碍、闰年等),这可能更容易使用而不是在你的 WHERE 子句中使用很多神秘的算术(为了用时间戳实现同样的效果)。
    猜你喜欢
    • 2016-04-11
    • 1970-01-01
    • 2012-12-27
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 2018-01-02
    • 1970-01-01
    相关资源
    最近更新 更多