【问题标题】:php date_default_timezone_set time() VS mysql now()php date_default_timezone_set time() VS mysql now()
【发布时间】:2011-04-27 13:16:26
【问题描述】:

我正在开发在线购物系统。只有英国客户可以从该网站下订单。

我想知道哪种方法最适合我?

date_default_timezone_set("欧洲/伦敦"); $time = time();

现在使用mysql函数()?

有时客户可以选择交货或取货时间。

注意:在英国,我们每年更改两次时间!

【问题讨论】:

  • 要考虑的一件事是用于存储时间的列的类型。 TIMESTAMP 保存带有时区的日期和时间,而 DATETIMEDATE 对时区一无所知。为了使TIMESTAMP 的吸引力降低,它的可存储范围要小得多(TIMESTAMP 的 '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC vs '1000-01-01' 到 '9999-12-31' 对于 DATEDATETIME)。

标签: php mysql sql database


【解决方案1】:

如果将时间发送到数据库,请使用 NOW();更少的开销,并且服务器时区希望始终是正确的,并且比 PHP 的时区更不可变。如果我们只是在谈论显示,而没有真正做数据库工作,那么仅仅为了获取时间而运行 mysql 查询就太过分了。

【讨论】:

    【解决方案2】:

    在 PHP 中,我通常会执行以下操作:

    date_default_timezone_set('GMT');
    

    然后,在连接到 MySQL 服务器后,我执行以下查询:

    'SET time_zone = "' . date_default_timezone_get() . '";'
    

    这确保 PHP 和 MySQL 使用相同的时区,所以NOW()date('Y-m-d H:i:s') 应该都产生相同的结果。

    关于日光变化,它们应该不是问题(如果您保持软件更新)。

    【讨论】:

    • UNIX_TIMESTAMP always 产生相同的时间戳,因为对于 unix 时间戳,时区被忽略。它始终基于 1971 年 1 月 1 日格林威治标准时间。
    • @Evert:没错,time() 也会发生同样的事情。应该用NOW()date() 调用替换它,但你明白了。 =)
    • @Alix 不,time() 考虑了时区。但是,如果您使用 DateTime 类设置时间戳,那么这不会考虑时区(它假定所有时间戳都是 GMT):new DateTime('@583848395493');
    • @Michael:对不起,你错了。 time() - 返回以 Unix 纪元 (1970 年 1 月 1 日 00:00:00 GMT) 以来的秒数为单位的当前时间。
    • @Alix 如果我听起来有点指责,我深表歉意。我进行了测试,你是对的,time() 忽略了默认时区。我一直在使用 time() 并且从未遇到任何时区问题,因此假设它考虑了时区......但我使用 date() 输出日期,所以这可能就是原因。
    【解决方案3】:

    这个问题的一个重要考虑因素是 PHP 和 MySQL 的时间是否相同?

    如果两者在同一台机器上运行,那么答案很可能是“是”,但如果它们在不同的机器上,那么它们很可能实际上是不同的。

    考虑使用 MySQL NOW() 函数将日期写入数据库的场景,另外您有一个查询,要求在过去 24 小时内创建的所有条目,使用 PHP 日期函数在查询中构建时间。如果 PHP 服务器上的时间与 SQL 服务器不同步,则可能会丢失报告中的记录(或连续几天将它们加倍,具体取决于它们不同步的方式) .这可能会导致错过交货等。

    这样做的结果是,您应该小心使用日期(尤其是日期时间),以保持一致。使用 PHP 还是 MySQL 日期功能并不重要,但您应该尝试使用与更新时相同的平台进行查询。

    当然,这种方式并不总是很重要,您可以务实地对待它 - 有时返回数据库只是为了找出时间太不方便了!但是当它很重要时,你应该小心。

    当然,如果两个系统在同一台服务器上,这不是问题,但您不应该假设情况总是如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-07
      • 2014-08-07
      • 2013-03-11
      • 1970-01-01
      • 2023-03-07
      • 2011-06-13
      • 2023-03-25
      相关资源
      最近更新 更多