假设我有时间指定给定的Olson / tz数据库时区,例如1973年7月1日15h 23min在非洲/马普托。
如何在node.js
中将其转换为通用时间UT,反之亦然?我已经在网上看到了一些图书馆,但是文档尚不清楚。欢迎使用完整的代码示例。
最佳答案
将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
形式)时,将其考虑在内。尽管中间结果是本地模式下的矩对象,但是基础时间戳仍基于UTC,因此到指定时区的转换仍然提供相同的输出。