javascript - 在 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);
它会打印出如上所述的错误日期。
解决方案
推荐阅读
- c# - Xamarin - MasterDetailPage 无法从任何页面调用
- python - Python 何时会/不会暂停协程的执行?
- python - 如何对 numpy 元组进行排序而不会出现关于只有长度为 1 的数组的错误可以转换为 python 标量
- javascript - 是否可以在 Styles.scss 中动态导入 Variables.scss 文件?
- r - 2 *“X2B”中的错误:二进制运算符的非数字参数
- python - django:将 DRY 和代码重用提升到一个新的水平?
- python - 使用朴素贝叶斯分类的 Twitter 情绪分析仅返回“中性”标签
- laravel - 如何在 laravel 中捕获 NotFoundHttpException 以发送自定义响应?
- python - numpy 打印矩阵一行一行
- swift - 如何使用 Mabox 和 Swift 检索我下载的离线地图包的列表?