【问题标题】:Create date from Unix Timestamp ignoring timezone从忽略时区的 Unix 时间戳创建日期
【发布时间】:2014-01-09 02:34:01
【问题描述】:

对于 oData Rest 服务,我使用 Moment.js 从 Unix 时间戳创建日期,我想忽略时区。 我的日期是“2013-12-24”,在 Unix 秒内是 1387839600。

使用

moment("2013-12-24", "YYYY-MM-DD").toISOString()

结果为“2013-12-23T23:00:00.000Z”,因为我住在 GMT+1。 通过使用

moment.utc("2013-12-24", "YYYY-MM-DD").toISOString()

我得到“2013-12-24T00:00:00.000Z”,这正是我想要的。我可以简单地在最后删除祖鲁时间的“Z”。

但我的日期的真实表示是一个 Unix 时间戳。所以如果我这样做了

moment.utc(1387839600, "X").toISOString()

我总是得到“2013-12-23T23:00:00.000Z”,但我希望它返回“2013-12-24T00:00:00.000Z”。

我的错在哪里? 感谢您的帮助!

【问题讨论】:

  • 使用 moment.utc(moment("1387839600", "X").format("L"), "DD.MM.YYYY").toISOString() 有效,但这似乎相当复杂!?
  • 或者只是moment(1387839600, 'X').format('YYYY-MM-DDT00:00:00.000')
  • 感谢@robertklep,我愿意接受您的评论作为对我问题的回答,但很遗憾,我无法将您的评论提升为完整答案...

标签: javascript date datetime momentjs


【解决方案1】:

Unix 时间戳,无论以秒还是毫秒为单位,始终采用 UTC。 1387839600 的值确实是 2013 年 12 月 23 日晚上 11:00 UTC。你用sites like this one来验证。

如果您希望它是 2013 年 12 月 24 日午夜 UTC,则时间戳将为 1387843200

所以时刻表现正确。您应该专注于您的 REST API,并确保它正确发出 UTC 而不是本地时间值。

另外,如果您只想要日期部分,请不要使用.toISOString。而是使用.format,例如:

moment.utc(1387843200, 'X').format('YYYY-MM-DD')

【讨论】:

    【解决方案2】:

    您可以“制作”自己的格式。任何需要按原样复制(未插入)的字符串都应包含在括号内。

    所以在你的情况下,这应该有效:

    moment(1387839600, 'X').format('YYYY-MM-DD[T00:00:00.000]')
    

    【讨论】:

      【解决方案3】:

      不要使用toISOString()。而是使用这样的东西:

      moment.utc(1387839600, "X").utcOffset(1).format('YYYY-MM-DD') + "[T" + moment.utc(1387839600, "X").utcOffset(1).format('HH:mm:ss.000]')
      

      【讨论】:

        【解决方案4】:

        调整onChange功能后,如

        <DateTimeField mode="date" inputFormat='MM-DD-YYYY' onChange= {this.onChange} />

        onChange 函数可以如下所示:

        onChange: function(value) { console.log({myDate: moment.utc(value, 'x').format('YYYY-MM-DDTHH:mm:ss.SSSZ')}); },

        似乎 onChange 值以 Unix ms 时间戳 (x) 而不是 Unix 时间戳 (X) 的形式出现,以防混淆。

        这应该打印一个类似2015-07-15T15:02:00.000+00:00的字符串

        【讨论】:

          猜你喜欢
          • 2013-06-03
          • 1970-01-01
          • 1970-01-01
          • 2012-10-30
          • 1970-01-01
          • 2022-07-08
          • 2013-10-22
          • 1970-01-01
          • 2010-10-02
          相关资源
          最近更新 更多