按时刻转换时间.js和时区

时间:2017-05-24 21:00:23

标签: datetime momentjs

我有一个复杂的时间转换问题;

我是通过node.js编码并使用moment,moment-jalaali和moment-timezone

我从clinet以jalali格式(例如:1396-03-03T23:00:00.00+04:30)获得时间,以便在UTC上保存的时间之前或之后搜索并查找一些数据;我的服务器有-04:00区域;

var moment = require('moment');
var momentJalali = require('moment-jalaali');
var momentTZ = require('moment-timezone');

var jFormat = "jYYYY-jM-jD HH:mm:ss z";
var format = "YYYY-M-D HH:mm:ss z";
var toDate = momentJalali(req.body.toDate, jFormat).tz('UTC').format(format);

console.log("date: \n" + toDate "\n " + moment().format('Z') + "\n"); //output: date:
2017-5-25 03:00:00 UTC
-04:00

我期待的回复是2017-5-24 19:30:00 UTC;我怎么能达到那个?

1 个答案:

答案 0 :(得分:2)

你不需要时间 - 时区。只需在UTC模式下解析输入。由于您提供了偏移量,因此会自动将其考虑在内。

moment.utc("1396-03-03T23:00:00.00+04:30", "jYYYY-jMM-jDDTHH:mm:ss.SSZ")
      .format("YYYY-MM-DD HH:mm:ss z")

//=>  "2017-05-24 18:30:00 UTC"

另请注意,您有一些错误的格式化令牌 - 它们区分大小写。

此外,如果你对它有任何控制,我会认真考虑 not 使用那种特定的输入格式。按照惯例,它似乎是ISO-8601扩展格式,除了ISO-8601 严格绑定到公历格里高利历。我的理解是,Jalaali日期通常写为1396/3/3 23:00:00,即jYYYY/jM/jD HH:mm:ss

另请注意,您在问题中要求的价值实际上是一小时。您当地的时间比UTC早4.5小时,因此减去:23 - 4.5 = 18.5,因此18:30 UTC,而不是19:30 UTC