收藏
回答

日期转成JSON格式的时候时区发生变化,与转化前相差8小时?

new Date("2020-07-27 09:43".replace(/-/g,"/") // 能获转化标准时间东八区的时间(正常时间)当转换为JSON时时间相差8小时

回答关注问题邀请回答
收藏

2 个回答

  • ♛Jerry♚
    ♛Jerry♚
    2020-07-27

    问题解决 因为调用toJSON将对象转为对应的字符串时,如果包含时间对象,时间对象会被转换为国家标准时间(ISO),而不是当前国家区域的时间

    new Date((this.data.starttime).replace(/-/g,‘/’))  这里转成(中国标准时间) 并没有一点用 因为问题不是出在this.data.starttime 本身

    正确的解决方法应该重写Date对象的prototype的toJSON方法

    //重写Date对象的prototype的toJSON方法

          Date.prototype.toJSON = function(){

            return this.toLocaleString()

          }

          var date = new Date((this.data.starttime).replace(/-/g,"/"))

          console.log("date==" + date + "jsonDate== " + date.toJSON())

    输出结果:date==Mon Jul 27 2020 11:28:00 GMT+0800 (香港标准时间)jsonDate== 2020/7/27 上午11:28:00

    2020-07-27
    有用 1
    回复
  • Anker.
    Anker.
    2020-07-27
    // 目标时区,东8区
    let targetTimezone = -8
    // 当前时区与中时区时差,以min为维度
    let _dif = new Date().getTimezoneOffset()
    // 本地时区时间 + 时差  = 中时区时间
    // 目标时区时间 + 时差 = 中时区时间
    // 目标时区时间 = 本地时区时间 + 本地时区时差 - 目标时区时差
    // 东8区时间
    let east8time = new Date().getTime() + _dif * 60 * 1000 - (targetTimezone * 60 * 60 * 1000)
    new Date(east8time)
    
    2020-07-27
    有用
    回复 4
    • ♛Jerry♚
      ♛Jerry♚
      2020-07-27
      let date = new Date((this.data.starttime).replace(/-/g,‘/’))
            let jsonDate = date.toJSON()

            console.log(‘date==’ + date + ‘jsonDate==’ + jsonDate )


      date==Mon Jul 27 2020 10:03:00 GMT+0800 (香港标准时间)jsonDate== 2020-07-27T02:03:00.000Z




      是转成json格式的时候时间才改变
      2020-07-27
      回复
    • Anker.
      Anker.
      2020-07-27回复♛Jerry♚
      new Date((this.data.starttime).replace(/-/g,‘/’))  这里转成(中国标准时间)
      2020-07-27
      回复
    • ♛Jerry♚
      ♛Jerry♚
      2020-07-27
      // 目标时区,东8区
            let targetTimezone = -8
            // 当前时区与中时区时差,以min为维度
            let _dif = new Date().getTimezoneOffset()
            // 本地时区时间 + 时差  = 中时区时间
            // 目标时区时间 + 时差 = 中时区时间
            // 目标时区时间 = 本地时区时间 + 本地时区时差 - 目标时区时差
            // 东8区时间
            let east8time = new Date().getTime() + _dif * 60 * 1000 - (targetTimezone * 60 * 60 * 1000)
            let date = new Date(east8time)

            console.log(‘date==’ + date + ‘jsonDate==’ + date.toJSON() )




      date==Mon Jul 27 2020 10:21:50 GMT+0800 (香港标准时间)jsonDate== 2020-07-27T02:21:50.910Z




      不行啊
      2020-07-27
      回复
    • Anker.
      Anker.
      2020-07-27回复♛Jerry♚
      你自己搜索下怎么转,时区问题,this.data.starttime
      2020-07-27
      回复
登录 后发表内容
问题标签