使用moment.js进行日期操作

时间:2018-12-04 06:54:53

标签: javascript timezone momentjs react-datetime

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

"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-即与首先,将偏移量恢复到另一个方向。

我该如何实现?

1 个答案:

答案 0 :(得分:0)

几件事:

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

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

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

    moment.utc(dateOfLoss, 'YYYY-MM-DD HH:mm')
    
  • 如果您随后将要呼叫.tz(userTimezone),则无需呼叫.unix()。 Unix时间戳始终基于UTC。尽管不清楚为什么要要求Unix时间戳,因为react-datetime不需要一个。

  • 您在问题的最后一段中给出的两个值相同,因此我不确定您要查找的是什么。您给的时间确实是1542783600,而不是1542776400

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