检查日期是否已经用时刻解析
Check if date has already been parsed with moment
我正在传递一个日期字符串,需要使用 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'
在做任何这些之前,我想检查它是否已经是我期望的格式。我该怎么做?
您可以使用 isValid() 方法在调用 toDate()
之前检查解析是否有效。演示:
var timezone = "America/Los_Angeles";
var dt = 'Sept 21, 2018';
var m = moment.tz(dt, 'MMMM D, YYYY', timezone);
var converted = m.toDate().toString();
console.log(converted);
var x = moment.tz(converted, 'MMMM D, YYYY', timezone);
console.log(x.isValid());
//if parsing worked, use the new value
if (x.isValid()) {
console.log(x.toDate());
}
// if not, assume it's already the correct format and just use that
else
{
console.log(converted);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.21/moment-timezone-with-data.min.js"></script>
我正在传递一个日期字符串,需要使用 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'
在做任何这些之前,我想检查它是否已经是我期望的格式。我该怎么做?
您可以使用 isValid() 方法在调用 toDate()
之前检查解析是否有效。演示:
var timezone = "America/Los_Angeles";
var dt = 'Sept 21, 2018';
var m = moment.tz(dt, 'MMMM D, YYYY', timezone);
var converted = m.toDate().toString();
console.log(converted);
var x = moment.tz(converted, 'MMMM D, YYYY', timezone);
console.log(x.isValid());
//if parsing worked, use the new value
if (x.isValid()) {
console.log(x.toDate());
}
// if not, assume it's already the correct format and just use that
else
{
console.log(converted);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.21/moment-timezone-with-data.min.js"></script>