首页 > 解决方案 > 处理从 javascript 到 MySQL 到 javascript 到 MS SQL 到 javascript 的时区

问题描述

我正在使用 NodeJS/javascript 来确定具有系统时区的当前日期。现在我想用 UTC+0 将此日期插入 MySQL。之后,我想再次使用 UTC+0 从 MySQL 中使用 NodeJS/javascript 选择此日期,现在将其插入到我希望将其再次存储为 UTC+0 的 MS SQL 中。最后,我再次使用 NodeJS/javascript 进行选择,但这次来自 MS SQL,而且我希望这次的日期位于系统中现在使用的时区中,无论我将来在哪里。

这是一个示例:对于 01.01.2018 15:00:00 UTC+1(德国冬季时间),我希望它使用 UTC+0 存储在两个数据库中。当夏天来临时,我的系统时区更改为 UTC+2(德国夏令时),或者我使用 UTC-5 搬到另一个国家/地区,我想从 MS SQL 获取日期以转换为我的系统使用的时区自动。

所以问题是:

附加信息:我在 NodeJS 中有两个程序相互通信。第一个(客户端)在他的 MySQL 数据库中插入一个日期,并将这个日期也发送到服务器应用程序。他将其插入自己的 MySQL 数据库的原因是在服务器未运行时出于同步原因,以便下次获取它们。当服务器从客户端收到日期时,这些日期应存储在服务器 MS SQL 数据库中。服务器管理员可以随时将这些日期导出到 Excel 中。但是必须将日期从 MS SQL (UTC+0) 中的日期转换为服务器系统时区,以便在 excel 文件中日期位于系统时区而不是 UTC+0

标签: javascriptmysqlnode.jssql-server

解决方案


我认为可以在此解决方案中进行一些优化,但我将首先回答您的问题。

如何使用系统时区将我的日期从 NodeJS 插入到带有 UTC+0 的 MySQL?

new Date()您可以使用- 将其转换为 MySQL 可以理解的 UTC 格式来获取系统时区new Date().toISOString()

要将此值存储在 MySQL 中,您需要一个DateTime字段。只需插入该值即可,但如果它不只是将其解析为日期。

我如何选择这个日期,以便我可以使用 NodeJS 将它插入 MS SQL 并且它也是 UTC+0?

好吧,您已经以始终为 UTC+0 的标准格式插入它。您只需选择它并插入它。

如何使用 NodeJS 从 MS SQL 中选择日期,以便它再次具有系统时区?

所以 - 您在 MS SQL 中有一个 DateTime 字段,您将通过 Node.JS 查询该字段 - 该字段在 UTC+0 中,您希望相应地获取服务器时区的时间吗?

好吧 - 如果你这样做new Date().getTimezoneOffset()应该会给你你的时区偏移量。所以它应该变成这样:

var date = MSSQLWrapper.someOperation('select d_field from ...');
var offset = new Date().getTimezoneOffset(); // Your offset
date.setHours(date.getHours() + offset); // Add your offset
console.log(date) // your aligned date.

编辑

如果要更改从 SQL 中选择的时区,可以使用AT TIME ZONE

SELECT your_date from your_table   
AT TIME ZONE 'Eastern Standard Time' AS my_new_date

您可以从服务器端在查询中传递时区名称。

或者您也可以查看TODATETIMEOFFSET

这个问题也有一些很好的例子:Convert datetime value from one timezone to UTC timezone using sql query


推荐阅读