【问题标题】:MySQL - best way to store YYYY-MM-DD date column for later retrieval as unix timestampMySQL - 存储 YYYY-MM-DD 日期列以供以后检索为 unix 时间戳的最佳方式
【发布时间】:2013-08-13 11:50:45
【问题描述】:

我有一张包含每日样本的读数表。因此,我有一个名为“日期”的列。我需要选择日期作为 unix 时间戳。

目前我有这个:

  • 日期列使用date类型
  • 插入格式为 YYYY-MM-DD
  • 在插入时,只关心日期而不是时间(所以可能存储为 UTC YYYY-MM-DD 00:00:00?)
  • 服务器时区为 UTC+2

我需要 UTC YYYY-MM-DD 00:00:00(一天的开始)的 unix 时间戳。但似乎 MySQL 将日期存储为 UTC 值,然后在检索时将它们转换回服务器时区。所以:

SELECT UNIX_TIMESTAMP(`date`) AS `date_stamp` ...

...实际上返回前一天的 unix 时间戳(YYYY-MM-DD 22:00:00)。

然后我考虑使用 CONVERT_TZ,但我有一个 Windows 服务器,所以似乎任何查询都返回 NULL,除非我配置 time zone description tables:

SELECT (UNIX_TIMESTAMP(CONVERT_TZ(`date`, 'UTC', 'SYSTEM'))) AS `date_stamp` ...

我做得对吗?我使用的是最佳日期格式吗?我是不是转换的最佳方式?

【问题讨论】:

  • Unix 时间戳始终采用 UTC。无论服务器时区设置如何,UNIX_TIMESTAMP(TIMESTAMP_FIELD) 都应该始终为您提供相同的数字。您如何将其转换为可读日期?
  • @Vatev - 数据库插入使用 PHP 日期时间:$date->format('Y-m-d')。数据库选择是上面的第二条语句:SELECT (UNIX_TIMESTAMP(CONVERT_TZ(date, 'UTC', 'SYSTEM'))) AS date_stamp ...。渲染是通过 Flot JavaScript 图表库(它采用 JavaScript 时间戳,即 unix 时间戳 * 1000)进行的。这可行,但似乎过于复杂。

标签: mysql date unix-timestamp


【解决方案1】:

尝试像这样选择您的日期字段

SELECT UNIX_TIMESTAMP(DATE(date)) date from myTable;

希望对你有帮助。

【讨论】:

  • 这仍然返回服务器时区日期的时间戳,而不是 UTC 日期的时间戳。
  • 然后试试这个函数:UTC_DATE(), UTC_TIME() or UTC_TIMESTAMP()
  • 由于这些返回 current UTC date,我也看不出这有什么帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-22
  • 2011-10-05
  • 1970-01-01
  • 2012-03-05
  • 2021-03-11
  • 2022-08-03
相关资源
最近更新 更多