假设我有时间使用给定的Olson / tz数据库时区,例如,1973年7月1日,非洲/马普托的15小时23分钟。
如何在node.js
中将其转换为通用时间UT,反之亦然?我在网上看过一些图书馆,但文档不清楚。欢迎使用完整的代码示例。
答案 0 :(得分:1)
将moment.js与moment-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 模式下的时刻对象,但基础时间戳仍然是基于UTC的,因此转换到指定时区仍然会提供相同的输出。