【问题标题】:Dates manipulation with moment.js使用 moment.js 进行日期操作
【发布时间】:2018-12-04 06:54:52
【问题描述】:

我从服务器收到以下日期:

"2018-11-21 07:00:00 UTC"

然后,我使用userTimzone 变量对其进行转换(因为我希望编辑器使用用户时区):

dateOfAction: moment(dateOfLoss, 'YYYY-MM-DD HH:mm Z').tz(userTimzone).unix(),所以dateOfAction1542776400。那就是:Wednesday, November 21, 2018 5:00:00 AM - 到目前为止一切都很好。这是 UTC 中的 dateOfAction,右偏移后

我使用react-datetime 作为日历编辑日期,使用UTC。 执行save 操作时, 触摸日期,日历输出仍然是1542783600,但我希望是1542783600 - 即与开始时相同的值,恢复偏移量在另一个方向。

我怎样才能做到这一点?

【问题讨论】:

    标签: javascript timezone momentjs react-datetime


    【解决方案1】:

    一些事情:

    • Moment 不会将 Z 标记映射到字符串 "UTC"。由于您在本地模式下进行解析,因此您实际上是根据本地计算机的时区而不是 UTC 获得的。因此,将代码的第一部分更改为:

      moment.utc(dateOfLoss, 'YYYY-MM-DD HH:mm [UTC]')
      

      方括号将UTC视为文字字符串,这不是严格要求的,因此您可以根据需要省略它,结果将是相同的。

      moment.utc(dateOfLoss, 'YYYY-MM-DD HH:mm')
      
    • 如果您以后只是要致电.unix(),则无需致电.tz(userTimezone)。 Unix 时间戳始终基于 UTC。虽然不清楚你为什么要求 Unix 时间戳,因为 react-datetime 不需要。

    • 您在问题的最后一段中给出的两个值是相同的,所以我不确定您具体在寻找什么。你给的时间确实是1542783600,不是1542776400

    • The readme file of react-datetime 描述了您可以使用的所有选项。您可以简单地将上面获得的 moment 对象传递给 value 道具。如果要更改行为,您可能需要使用 utcdisplayTimeZone 道具。您可能还需要在将 moment 对象传入之前调用 .local().tz(userTimezone),但我不确定这个特定组件是否需要这样做。

    【讨论】:

      猜你喜欢
      • 2014-07-25
      • 1970-01-01
      • 2015-09-14
      • 2020-06-25
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多