我有一个复杂的时间转换问题;
我是通过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
;我怎么能达到那个?
答案 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
。