【问题标题】:Set timezone for MYSQL NOW()为 MYSQL NOW() 设置时区
【发布时间】:2017-12-09 21:54:35
【问题描述】:

在我的服务器上,我保留了操作日志,并使用 MYSQL NOW() 函数生成的时间戳进行跟踪。但问题是生成的时间戳在 UTC 中,我希望生成 NOW() 函数与Asia/Kolkata 的本地时间相对应的时间戳。我尝试了 SET 时区,但它不起作用

$queryt="SET time_zone='Asia/Kolkata'";
mysqli_query($mysqli, $queryt))

我做错了什么?

【问题讨论】:

  • 不,你没有。您希望将时间存储为 UTC,然后将其转换为您需要的任何本地时间。请记住,本地时间与查看数据的用户相关。例如,亚洲?加尔各答对你来说可能很棒,但我在美国。如果你给我看带有日期时间戳的东西,我想看到它与我的时区相关。在 PHP 中,DATETIME 类提供强大的支持,可以将任何日期时间值从 UTC 转换为您想要的任何时区。
  • 好吧,如果是这样的话,有什么方法可以使用 jquery 等更改以本地时间格式显示的日期时间吗?
  • 最好用 PHP 格式化日期。 JavaScript 对时区没有很好的把握
  • 我同意 Phil,使用 DATETIME 在服务器端进行。代码很简单。一个更大的问题是你将如何计算出你想要的时区。正如我所说,一种复杂的方法是尝试使用最终用户的 IP 来计算出他们的时区。但是,如果您只想在“亚洲/Kokata”中显示所有内容,那是微不足道的。

标签: php mysql


【解决方案1】:

您的问题不清楚,但如果您想将日期和时间值从 UTC 更改为您的时区,您可以使用

CONVERT_TZ(date, 'UTC',  'Asia/Kolkata')

您可以选择您所在时区的 UTC 日期和时间值:

SELECT CONVERT_TZ(date, 'UTC',  'Asia/Kolkata') AS local FROM table

如果 CONVERT_TZ 功能不起作用,则需要安装时区(时区应该已经存储在 MySQL 中)。需要注意的是,您需要将 UTC 值存储在数据库中,然后转换为您想要的任何时区。

【讨论】:

    【解决方案2】:

    试试这个:

    SET GLOBAL time_zone = "Asia/Kolkata";
    SET time_zone = "+05:30";
    SET @@session.time_zone = "+05:30";
    

    【讨论】:

      【解决方案3】:

      当您使用 PHP(作为 OP)时,如果您无法安装 CONVERT_TZ 函数,则转换时区的另一个选项是使用偏移间隔。

      在 PHP 中:

      date_default_timezone_set('Asia/Kolkata'); // Set timezone if different from default
      $TZ_OFFSET = date('Z')/3600; // Timezone offset in hours from UTC (allows for DST where applicable)
      

      然后使用该偏移变量运行 MySQL 查询

      SELECT (modified_date + interval $TZ_OFFSET hour) AS modified_date FROM table;
      

      如果您想在设置为 UTC 的数据库服务器上使用“NOW()”,但想在应用程序中查询本地时区的日期/时间,这很有用。

      【讨论】:

        猜你喜欢
        • 2011-09-21
        • 2012-01-01
        • 2012-05-30
        • 2020-02-23
        • 2013-09-22
        • 2012-09-21
        • 2020-02-16
        • 1970-01-01
        • 2012-08-04
        相关资源
        最近更新 更多