如何将时区信息存储在mysql日期时间列中



目前,我有来自shopify api的时间戳(2018-12-16T17:36:29+11:00(,我需要将其存储在mysql的日期时间字段中。

第一个问题:

2018-12-16T17:36:29+11:00到底是什么意思?

日期:2018-12-16,

时间:17:36:29,

时区:+11:00?????

第二个问题:

如果我想将时间戳存储到mysql的datetime列中。我收到这个错误

SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '2018-12-16T17:36:29+11:00' for column 'shopify_created_at' at row 1

用时区信息存储时间的正确方法是什么?

2018-12-16T17:36:29+11:00到底是什么意思?

这是UTC偏移时间戳,因此您有:

UTC Date: `2018-12-16`
UTC Time: `17:36:29`
Offset: `+11:00`

我不熟悉Shopify及其API,但是,如果知道/存储时区很重要,我会将UTC时间存储在数据库的一列中(使用datetime字段类型(,将偏移小时存储在另一列中。

示例:

|    Date                  |   Timezone  |
==========================================
|    2018-12-16 17:36:29   |   +11       |

通过这种方式,您现在可以在所需的时区中获得准确的时间。示例:

$strtime = $record['Date'].' '.$record['Timezone']' hours';
echo date('Y-m-d H:i:s', strtotime($strtime));

时区:+11:00=UTC+11:00是UTC的+11小时时间偏移的标识符。此时间用于:北亚、澳大利亚和其他一些国家。

至于时间戳,您可以简单地使用:

$time = '2018-12-16T17:36:29+11:00';
$created = date('Y-m-d H:i:s', strtotime($time)); //result: 2018-12-16 09:36:29
$update = "UPDATE db.table SET shopify_created_at='".$created."' WHERE id=X"; 

我不熟悉shopify,但它看起来像UTC偏移,所以它应该是:

date: 2018-12-16,
time: 06:36:29,
timezone: UTC+11:00

至于你的第二个问题,你没有:

MySQL将TIMESTAMP值从当前时区转换为UTC进行存储,并从UTC转换回当前时区进行检索。

所有时间戳都是无时区的。您可以单独保存时区,也可以将其保存为字符串。最好的方法是通过从时钟中减去时区来转换2018-12-16T17:36:29+11:00字符串,然后分别保存2018-12-16T06:36:29+11:00。如果您不需要时区参考以供进一步使用,您可以将时间标准化并放弃TZ规范。

此外,根据你的需要,你可能同时做这两件事。规范化时间戳将有助于以可靠的方式进行排序,无TZ,而如果您需要其他shopify查询,则可以存储和检索完整字符串。

最新更新