首页 > 解决方案 > 在 Node.js 代码中可靠地将 MySQL 日期时间值解释为 UTC

问题描述

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

在 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通过 mysql2createPool函数创建的池在哪里。

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

标签: javascriptmysqlnode.jsdatetimemysql2

解决方案


推荐阅读