javascript - 使用 moment.js 进行日期操作
问题描述
我从服务器收到以下日期:
"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 中的 dateOfAction,带有右偏移
我react-datetime
使用UTC作为日历编辑日期。执行save
操作时,不触摸日期,日历输出仍然是1542783600
,但我希望是1542783600
- 即与开始时相同的值,在另一个方向恢复偏移量。
我怎样才能做到这一点?
解决方案
一些东西:
Moment 不会将
Z
token 映射到 string"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
。react-datetime 的自述文件描述了您可以使用的所有选项。您可以简单地将上面获得的时刻对象传递给
value
道具。如果你想改变行为,你可能需要使用utc
or道具。displayTimeZone
在传递它之前,您可能还需要调用.local()
or.tz(userTimezone)
on the moment 对象,但我不确定这个特定组件是否需要这样做。
推荐阅读
- javascript - 使用 firebase 功能向特定设备发送消息
- sharepoint-2013 - 使用德语语言环境的用户无法找到带有数字的条目,其中包含两个点 - 例如 82.3189.37
- apache-spark-sql - Databricks 更新表不适用于 orc 格式
- php - 带负号的十进制数字验证
- mysql - SQL查询将两个前面的数字从“2048”更改为“1948”
- javascript - 单击时的表单验证不起作用javascript
- c# - 如何证明弱引用已释放?
- jsf - 我们如何将 jsf 错误消息从 JSF 转换器重定向到由 Backing Bean 支持的文本区域
- apache-spark - 从 Mysql 作为 Stream 读取
- python - Python - Selenium:如何在网页中单击文本为“年份”的元素