将 CST/CDT 转换为 UTC Javascript

Convert CST/CDT to UTC Javascript

我有字符串格式的时间,这是 CDT 或 CST 的当地时间(取决于是否进行夏令时)。 前-

2021-08-19 15:55:40

所以它只是字符串数据,没有tz的指示,我想将这个本地时间转换为UTC。 最好的方法是什么? 是否已经存在可以自动识别和转换的npm包?

我目前正在尝试使用的代码: 作为第一步,我尝试将 DateTime 转换为 ISO,可以轻松将其转换为 UTC

const { DateTime } = require("luxon");
var overrideZone = DateTime.fromSQL("2021-05-15 23:10:23", { zone: "America/Mexico_City" });

console.log(overrideZone.toISO()) //=> '2021-05-16T11:10:23.000-05:00'

给我的日期是 5 月 16 日,但很明显我的意思是 5 月 15 日 23:10(晚上 11:10)而不是 16 日。

我不知道我的代码有什么问题

您可以尝试使用 DateTime.fromFormat() 函数解析日期字符串,格式为 'yyyy-MM-dd HH:mm:ss'.

您可以使用 setZone() 函数将 DateTime 时区转换为 UTC。我们将时区设置为 'UTC' 以转换为 UTC 时间。

注意: 这里的工作修复是从 Node 10.24 升级到至少 Node 12.x

let { DateTime } = luxon;

const dateStr = '2021-05-15 23:10:23';
const zone = 'America/Mexico_City';

const dt = DateTime.fromFormat(dateStr, 'yyyy-MM-dd HH:mm:ss', { zone });
const utcTime = dt.setZone('UTC');

console.log('Local time (Central):', dt.toISO());
console.log('UTC time:', utcTime.toISO());
    
<script src="https://cdnjs.cloudflare.com/ajax/libs/luxon/2.0.1/luxon.min.js" integrity="sha512-bI2nHaBnCCpELzO7o0RB58ULEQuWW9HRXP/qyxg/u6WakLJb6wz0nVR9dy0bdKKGo0qOBa3s8v9FGv54Mbp3aA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

运行 在 Windows 10.0.19043.0 上使用 Node.js 14.15.5 和 luxon 2.0.2 的相同代码给出了结果:

Local time (Central): 2021-05-15T23:10:23.000-05:00
UTC time: 2021-05-16T04:10:23.000Z

所以可能是环境不同造成的。您是否尝试过使用更高版本的 Node.js?

使用 node:10.24 Docker 图像我得到以下输出

Local time (Central): 2021-05-16T11:10:23.000-05:00
UTC time: 2021-05-16T16:10:23.000Z

所以在我看来这是一个 Node.js 版本问题。我建议尝试稍后的 Node.js 版本。我试过 node v12.16.1 并得到了正确的输出。所以我建议至少尝试使用节点 v12 来解决您的问题。