在Node.js中将Olson/tz时区时间转换为世界时,反之亦然

Convert Olson/tz timezone time to universal time and vice-versa in Node.js

本文关键字:转换 世界 反之亦然 时间 时区 js Node 中将 Olson tz      更新时间:2023-09-26

假设我有时间访问给定的Olson/tz数据库时区,例如,1973年7月1日,非洲/马普托,时间为15时23分。

如何在node.js中将其转换为世界时UT,反之亦然?我在网上看过一些图书馆,但文件不清楚。欢迎提供完整的代码示例。

使用moment.js和moment时区,并假设ISO8601格式(您没有指定)。

加载node.js

(web浏览器可以跳过此步骤)

npm install moment-timezone
var moment = require('moment-timezone');

从当地时间转换为UTC

var m = moment.tz("1973-07-01T15:23", "Africa/Maputo");
var s = m.toISOString();  // "1973-07-01T13:23:00.000Z"

var m = moment.tz("1973-07-01T15:23", "Africa/Maputo");
var s = m.utc().format();  // "1973-07-01T13:23:00.000+00:00"

如果您只是通过API发送结果或将结果保存在数据库中,则第一种形式更紧凑,也最简单。第二种形式是使用utc函数的示例,如果您打算将参数传递给format以生成不同格式的字符串,或者如果您打算调用除format之外的其他函数,则该函数更有用。

从UTC转换为当地时间

var m = moment.utc("1973-07-01T13:23").tz("Africa/Maputo");
var s = m.format();  // "1973-07-01T15:23:00+02:00"

var m = moment("1973-07-01T13:23:00.000Z").tz("Africa/Maputo");
var s = m.format();  // "1973-07-01T15:23:00+02:00"

在第一个表单中,我展示了可以使用moment.utc函数来解析不包含偏移量信息的字符串,并将其解释为UTC。这是更明确的形式。

第二种形式表明,当存在偏移信息(Z+00:00形式)时,将其考虑在内。尽管中间结果是本地模式下的矩对象,但底层时间戳仍然是基于UTC的,因此转换到指定时区仍然提供相同的输出。