首页 > 解决方案 > 在 SQLite 中以 UTC 存储并使用 PHP 在本地时区显示

问题描述

我有一个包含日期时间列的表:

$db = new SQLite3('test.db');
$results = $db->query('CREATE TABLE test (id INTEGER PRIMARY KEY AUTOINCREMENT,
                                                        date DATE, foo TEXT);');

我添加一行(以UTC存储添加行的日期时间)

$results = $db->query('INSERT INTO test (date, foo) VALUES(CURRENT_TIMESTAMP, "bar");');

这行得通。现在显示行时:

$results = $db->query('SELECT * FROM test ORDER BY date desc');
while ($row = $results->fetchArray()) {
    echo $row['date'];
}

日期显示如下,以 UTC 为单位:2019-04-27 16:41:33

如何改为在本地时区显示?(包括夏令时)

我可以想象有不同的选择:

如何正确执行此操作?

标签: phpsqlsqlitedatetimetimezone

解决方案


正如评论所建议的,此页面提到了localtime修饰符。这是一个解决方案:

$results = $db->query('SELECT datetime(date, "localtime") AS localdate, foo FROM test ORDER BY date desc');
while ($row = $results->fetchArray()) {
    echo $row['localdate'];
}

推荐阅读