>我从服务器收到以下日期:
"2018-11-21 07:00:00 UTC"
然后,我使用userTimzone
变量转换它(因为我希望编辑器使用用户时区):
dateOfAction: moment(dateOfLoss, 'YYYY-MM-DD HH:mm Z').tz(userTimzone).unix()
,所以dateOfAction
1542776400
。也就是说:Wednesday, November 21, 2018 5:00:00 AM
- 到目前为止一切顺利。这是 UTC 格式的日期操作,在右偏移量之后
我使用react-datetime
作为日历,使用 UTC 编辑日期。 执行save
操作时,在不触摸日期的情况下,日历输出仍然1542783600
,但我希望1542783600
- 即与开始时相同的值,在另一个方向上恢复偏移量。
我怎样才能做到这一点?
几件事:
-
时刻不会将
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
。 -
反应日期时间的自述文件描述了您可以使用的所有选项。 您可以简单地将上面获得的 moment 对象传递给
value
道具。 如果要更改行为,可能需要使用utc
或displayTimeZone
道具。 在传入 moment 对象之前,您可能还需要在 moment 对象上调用.local()
或.tz(userTimezone)
,但我不确定这个特定组件是否需要这样做。