将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 模式下的 moment 对象,但底层时间戳仍然是基于 UTC 的,因此到指定时区的转换仍然给出相同的输出。