【问题标题】:Setting UTC as time zone in PHP and MySQL在 PHP 和 MySQL 中将 UTC 设置为时区
【发布时间】:2015-04-16 04:01:11
【问题描述】:

我正在开发一个应用程序,但遇到了一个小问题......

我如何处理时区,PHP 和 MySQL 之间会不会有冲突?我想做的是像date_default_timezone_set('UTC');这样在PHP中将时区设置为UTC,并使用DATETIME将其存储在MySQL中。

MySQL 会将我通过 PHP 提供的时间更改为它设置的任何时区,还是只存储提供的值?如果它会改变它,我如何将 MySQL 中的时区也设置为 UTC。

我想将时区设置为 UTC,所以如果我确实需要担心更改不同时区的时间,我可以添加/减去任何偏移量。

附:我是网络开发新手。

【问题讨论】:

  • 无论您的时区在 MySQL 还是 PHP 中,时间戳都应该是相同的值。我个人认为将时间戳存储在数据库中是最佳实践。您可以稍后使用这些值并根据需要格式化输出日期/时间(例如,向不同时区用户显示不同的输出、不同的日期/时间格式等)
  • 但是如果我想在 MySQL 中使用 DATETIME,那么按照我提到的在 PHP 中设置时区、使用 date() 获取当前时间并插入 MySQL 的方式会不会有任何问题。 .. 或者 MySQL 会将值更改为它的时区是什么?
  • 好吧 m8,我想我不是回答这个问题的合适人选。一般来说,我总是在数据库中保留时间戳,而数据库或 php 的时区并不重要(时间戳是任何地方的同一时刻)。稍后在提取数据时,我使用 date() 根据用户设置的时区将时间戳格式化为日期时间字符串。保留时间戳还可以让我轻松处理日期时间范围,这正是我所需要的并且我目前正在使用的。实际上,从未在 MySQL 中使用过 DATETIME 并且无法详细说明它,因为我将 PHP 的 time() 函数返回的内容存储在数据库中。
  • 当然,我使用这种方法并不意味着它是最好的,但仍然符合我的个人要求。

标签: php mysql timezone


【解决方案1】:

使用以下代码提取 TimeZone Offset 值。然后将其添加到您的实际日期时间值。它会将您的日期时间值转换为 UTC 时间。

set @TimeZoneOffSet := TIMEDIFF(NOW(),UTC_TIMESTAMP);
select ADDTIME(date_time_column,@TimeZoneOffSet) from table_name;;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 2016-03-29
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    相关资源
    最近更新 更多