【问题标题】:Saving a datetime string from PHP into MySQL将日期时间字符串从 PHP 保存到 MySQL
【发布时间】:2013-07-08 08:16:23
【问题描述】:

好的,所以我有一个Y-m-d H:i:s 格式的 PHP 日期时间字符串。例如:

'2013-07-01 00:04:37'

此外,我还有一个时区字符串,例如:

'-05:00'

我想将这两个字符串转换为整数(unix 时间),然后将其存储在 MySQL 数据库中。你会怎么做?

我知道给定一个字符串,你可以在 PHP 中得到如下的 unix 时间:

date_create('2013-07-01 00:04:37')->getTimestamp();

但是,您将如何调整它以适应正确的时区?另外,如何从 PHP 中将 unix 时间戳存储在 MySQL 中?

【问题讨论】:

  • 你考虑过CONVERT_TZ()mysql函数吗?

标签: php mysql datetime timezone unix-timestamp


【解决方案1】:

可以使用mysql函数CONVERT_TZ()

CONVERT_TZ(dt,from_tz,to_tz)

CONVERT_TZ() 将日期时间值 dt 从 from_tz 给定的时区转换为 to_tz 给定的时区,并返回结果值。

例子:

SELECT CONVERT_TZ('2013-07-01 00:04:37','+00:00','-05:00');

这个输出2013-06-30 19:04:37你可以在INSERT语句中使用这个函数。

【讨论】:

  • 你能给我一个例子INSERT声明吗?另外存储日期的列应该属于哪个域?
  • INSERT INTO T1(id,date) VALUES (NULL, CONVERT_TZ('2013-07-01 00:04:37','+00:00','-05:00')); 我不明白你问题的另一部分。
  • 谢谢。另一部分只是意味着“我应该将日期时间存储为 DATETIME 值还是 TIMESTAMP 值?”我了解 TIMESTAMP 值在存储之前从系统时区转换为 UTC,反之亦然,然后再被检索。在这种情况下,您将如何正确存储时间戳。我的思路是INSERT INTO T1 (id, date) VALUES (NULL, CONVERT_TZ('2013-07-01 00:04:37', '-05:00', (SELECT @@global.time_zone)));。
  • 保存方式由您决定。我更喜欢日期时间,但并非总是如此(例如,当我需要使用 CURRENT_TIMESTAMP 更新列时)。如果您想从 -5:00 时区转换为 SYSTEM 中设置的时区,那么您提供的代码就可以了。
【解决方案2】:

您可以添加时区;)

类似:

date_create('2013-07-01T00:04:37-05:00')->getTimestamp();

您可以在文档中看到:http://es1.php.net/manual/en/datetime.construct.php

【讨论】:

  • 太棒了。您将如何将此时间戳存储到 MySQL 数据库中?
  • $timestamp = date_create('2013-07-01T00:04:37-05:00')->getTimestamp(); 和... INSERT INTO table VALUES time = '$timestamp' 与您的 PDO / Mysqli 扩展... 你从来没有这样做吗? :O 检查这个:link 你可以在 mysql 中将该字段设置为时间戳 ;)
【解决方案3】:

当您将时间和日期转换为 Unix 时间戳时,它会将其转换为表示自 1970 年 1 月 1 日 00:00 UTC 以来的秒数的整数。因此,如果您将您的时区输入到创建时间戳的函数中,它将调整秒数。

然后您可以将此值保存在 MySQL int 列中,因为时间戳是有符号整数。有关这方面的更多信息,请参阅How should unix timestamps be stored in int columns?。你可以做类似的事情

INSERT INTO table (timestamp, content) VALUES ('your timestamp','your content');

将其插入您的表格中。

【讨论】:

    猜你喜欢
    • 2014-02-21
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多