使用moment.js验证日期

时间:2016-08-10 10:48:31

标签: javascript date momentjs

我在使用moment.js验证日期时遇到了一些问题。 Moment.js具有isValid()功能。但是,这似乎并不像我期望的那样有效。

代码

var startDate = moment($('.input-start').val()).format('YYYY-MM-DD');
var endDate = moment($('.input-end').val()).format('YYYY-MM-DD');

if (startDate.isValid() && endDate.isValid()) {
    // The script will never come here
    // Additionally it throws a TypeError saying isValid is unavailable for startDate
}

我认为这说明了我的问题,但如果需要进一步的细节,请不要犹豫。

2 个答案:

答案 0 :(得分:2)

@ssbb所述,您必须

moment(dateString, format).isValid()

但是这里是catch,moment在构造函数中有4个参数,

moment(dateString, format, timeZone, strict)

注意: strict的默认值为false

示例

var dateStr = "10/2/2016";

var format = "YYYY-MM-DD";
var date = moment(dateStr, format);
console.log(date.isValid(), date.format(format))

var date1 = moment(dateStr, format, undefined, true)
console.log(date1.isValid(), date1.format(format))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>

答案 1 :(得分:0)

Format函数返回一个字符串,因此您无法在其上应用isValid函数。

如果您想根据特定格式检查两个日期是否有效,您可以执行以下操作:

var startDate = moment($('.input-start').val(), 'YYYY-MM-DD').isValid();
var endDate = moment($('.input-end').val(), 'YYYY-MM-DD').isValid();

if (startDate && endDate) {
    ...
}

有关详细信息,请查看有关此问题的更多信息的official docs from MomentJS