【发布时间】: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'))) ASdate_stamp...。渲染是通过 Flot JavaScript 图表库(它采用 JavaScript 时间戳,即 unix 时间戳 * 1000)进行的。这可行,但似乎过于复杂。
标签: mysql date unix-timestamp