首页 > 解决方案 > 如何在mysql datetime列中存储带有时区信息的时间?

问题描述

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

第一个问题:

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

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

标签: phpmysqllaraveltime

解决方案


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));

推荐阅读