【问题标题】:Convert time by moment.js and timezone通过 moment.js 和 timezone 转换时间
【发布时间】:2017-05-24 21:00:22
【问题描述】:

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

我正在使用 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;我怎么能做到这一点?

【问题讨论】:

    标签: datetime momentjs


    【解决方案1】:

    为此,您不需要时刻时区。只需在 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"
    

    另请注意,您有一些格式标记错误 - 它们区分大小写。

    此外,如果您可以控制它,我会认真考虑使用该特定输入格式。按照惯例,它似乎是 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

    【讨论】:

    • 感谢 Matt 您的代码以及您提供的有关日期格式的信息;对我有很大帮助
    猜你喜欢
    • 2015-08-27
    • 2017-07-04
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2020-02-20
    • 2018-03-08
    • 2016-05-24
    相关资源
    最近更新 更多