【问题标题】:momentjs toDate() - timezone gets resetmomentjs toDate() - 时区被重置
【发布时间】:2015-05-21 19:54:57
【问题描述】:

我正在使用 momentjs 并使用 convertedDate = moment().utcOffset(timezone).format() 将日期转换为不同的时区。这很好用,但它是一个字符串,我需要将它转换为日期对象。

我尝试过new Date(convertedDate)moment().utcOffset(timezone).toDate(),但这会将我当前的时区作为日期对象返回。如何保留转换后的时区?

【问题讨论】:

    标签: javascript momentjs


    【解决方案1】:

    所以我离得并不远。该格式需要排除时区才能正常工作。这段代码终于按我的需要工作了。

    convertedDate = new Date(moment().utcOffset('-4').format('YYYY-MM-DD HH:mm'));

    【讨论】:

    • 这不是一个好方法。它依赖于Date 对象的解析,它基本上是在说输入比当地时间晚了四个小时。 Date 对象不能代表另一个时区。
    【解决方案2】:

    使用moment根据时区获取本地日期对象的更简洁方法如下:

    convertedDate = moment.utc(moment.tz(timezone).format('YYYY-MM-DDTHH:mm:ss')).toDate()
    

    PS:假设两件事

    • 您已导入'moment''moment-timezone'
    • timezone 的值类似于'Asia/Kolkata',而不是偏移值

    【讨论】:

      【解决方案3】:

      这应该可行:

      我也有同样的问题。只需使用您使用的相同方法将日期作为字符串获取。假设您的日期是,例如:'2018-08-05T10:00:00'。

      现在您需要具有正确时间的 Date 对象。要将字符串转换为对象而不弄乱时区,请使用getTimezoneOffset

      var date = new Date('2016-08-25T00:00:00')
      var userTimezoneOffset = date.getTimezoneOffset() * 60000;
      new Date(date.getTime() - userTimezoneOffset);
      

      getTimezoneOffset() 将返回负值或正值。必须减去它才能在世界上的每个地方工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-02
        • 2021-11-22
        • 2016-02-13
        • 1970-01-01
        • 2016-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多