【问题标题】:Convert Olson/tz timezone time to universal time and vice-versa in Node.js在 Node.js 中将 Olson/tz 时区时间转换为通用时间,反之亦然
【发布时间】:2015-11-15 15:20:31
【问题描述】:

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

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

【问题讨论】:

标签: javascript node.js timezone datetime-conversion


【解决方案1】:

moment.jsmoment-timezone 一起使用,并假设采用ISO8601 格式(您没有指定)。

为 node.js 加载

(网络浏览器可以跳过这一步)

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 形式)时,它会被考虑在内。虽然中间结果是 local 模式下的 moment 对象,但底层时间戳仍然是基于 UTC 的,因此到指定时区的转换仍然给出相同的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 2012-01-18
    • 2013-02-18
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    相关资源
    最近更新 更多