【发布时间】:2019-02-25 23:30:42
【问题描述】:
我正在传递一个需要使用moment 适当解析的日期字符串。问题是在某些情况下它会被解析两次,这会导致它变成undefined。
这是当前代码的样子:
moment.tz(dt, 'MMMM D, YYYY', timezone).toDate()
当我第二次解析它时,我得到:
moment.invalid(/* 2018-09-21T05:00:00.000Z */)
这会导致当我执行 toDate() 时变成 undefined。
虽然第一次我会得到我所期望的:
'2019-02-01T05:00:00.000Z'
在做任何这些之前,我想检查一下它是否已经符合我期望的格式。我该怎么做?
【问题讨论】:
-
为什么会被解析两次?这听起来有点像一个逻辑缺陷。有没有更好的方法通过改变代码流来防止这种情况发生?
-
这与数据的转换有关。有时我将其转换为 json,有时从 json 转换为 csv,有时直接转换为 csv。这就是为什么我需要知道如何检查数据是否已经是我期望的格式,这将是我对逻辑缺陷的补救措施。
-
而不是在解析日期之前检查变量的类型(我相信这将是您在这个问题中寻找的答案),我会尝试理解为什么函数在它被调用时被调用不需要,然后修复它。
-
我猜您在更改数据格式的同时更改日期字符串(即在从 JSON 更改为 CSV 或其他内容的同时进行)。也许你可以把这两个过程分开,我不知道,我没有足够的信息来做出判断。但是如果没有更好的选择,您可以在调用
toDate()之前使用isValid() 方法来检查解析是否有效@ -
也许你应该向我们展示更多代码。
标签: javascript date momentjs moment-timezone