【问题标题】:Moment.js resolve timezone offsetMoment.js 解决时区偏移
【发布时间】:2018-10-18 06:39:52
【问题描述】:

我在 Angular 6 前端工作,并从另一个没有时区的系统时间戳(C# 后端,DateTime)接收。我怀疑 javascript 会自动将本地时区添加到 Date 对象。

例子:

从后端接收:2018-10-15T07:53:00.000Z

当控制台记录时:console.log(timestamp) // Mon Oct 15 2018 09:53:00 GMT+0200

我正在使用 moment.js 并且已经尝试过 moment.utc()moment(DATE).utc()。但它仍然添加了本地时区,特别是因为我必须使用.toDate() 将我的时刻对象重新转换回Date 类型。

如何解决时区差异并取回 UTC 日期以使用或与收到的相同结构?

【问题讨论】:

    标签: javascript momentjs


    【解决方案1】:

    尝试根据需要格式化使用。

    let str = '2018-10-15T07:53:00.000Z';
    let moment = moment(str).utcOffset(str)
    console.log(moment.format('DD/MM/YYYY HH:mm'))
    <script src="https://momentjs.com/downloads/moment.js"></script>

    第二个片段(使用字符串中的日期对象)

    let str = '2018-10-15T07:53:00.000Z';
    let moment = moment(str).utcOffset(str);
    console.log(moment.toDate())
    <script src="https://momentjs.com/downloads/moment.js"></script>

    【讨论】:

    • 感谢您的回答。问题是,.format() 返回的字符串确实格式正确,但我需要一个 Date 对象来进行进一步的工作(例如日期比较)。
    • @knnhcn 有一瞬间().toDate();
    • 确实如此,但在文档中显示为:As Javascript Date: To get a copy of the native Date object that Moment.js wraps。所以它基本上只是一个包装器,你会得到与原生 js .toDate() 相同的结果。 link
    【解决方案2】:

    您的输入是 UTC,将被很好地解析。 Javascript 日期没有时区的概念!本地时区由用于序列化的静态方法应用(Date.toString()Date.toDateString() 等)(Console.log(Date) 使用 Date.toString()。)

    使用Date.toLocaleString([],{timeZone:"UTC"})。强制 UTC,您将在输出中看到与输入相同的时间。更多细节是here :-)

    它正在工作:

    console.log(new Date('2018-10-15T07:53:00.000Z').toLocaleString([],{timeZone:'UTC'}))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-11
      • 2017-02-21
      • 2021-10-03
      相关资源
      最近更新 更多