在 Node.js 代码中可靠地将 MySQL 日期时间值解释为 UTC

问题描述

我有一个恼人的问题,即在我的开发人员环境和测试环境中,相同的 MysqL datetime 值的解释不同。

MysqL 数据库中,存储如下(两种环境下)。

2021-04-07 04:30:21

此处没有时区信息(例如 ISO-8601 表示)。所以我认为由客户决定这个存储日期/时间的时区。

Node.js 代码使用 mysql2 库与数据库交互。

在测试环境中,读取上面的日期/时间对我来说正确调整为当地时间:

Wed Apr 07 2021 14:30:21 GMT+1000 (Australian Eastern Standard Time)

然而,在我的开发环境中,日期/时间值没有改变,但它被错误地解释为本地时区中的日期/时间:

Wed Apr 07 2021 04:30:21 GMT+1000 (Australian Eastern Standard Time)

我不确定问题出在哪里。据推测,测试服务器的配置与我的开发环境不同。有什么想法可能出问题吗?

更多信息

MysqL 表定义

CREATE TABLE `payments` (
  `id` int(8) unsigned NOT NULL AUTO_INCREMENT,`amount` decimal(8,2) NOT NULL DEFAULT 0.00,`payment_date` datetime NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=94 DEFAULT CHARSET=utf8;

用于读取值的 JavaScript 代码的精简版:

api_helpers.pool.execute("SELECT * FROM `payments`",[],function (err,payments) {
        callback(err,payments);
    }
);

其中 api_helpers.pool 是通过 MysqL2 createPool 函数创建的池。

如果我然后循环遍历 payments 并执行 console.log(payment.payment_date);,它会打印出如上所述的错误日期。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)