检查date是否有效

Check if date is a valid one

本文关键字:有效 是否 date 检查      更新时间:2023-09-26

场景如下:

我有一个String日期和一个不同的日期格式。例:
日期:2016-10-19
dateFormat:"DD-MM-YYYY"。

我需要检查这个日期是否有效。

我已经尝试了以下事情

var d = moment("2016-10-19",dateFormat);

d.isValid()每次都返回false。不瞬间。js解析日期在给定的格式?

然后我尝试在DD-MM-YYYY格式日期,然后将其传递给Moment.js:

var d = moment("2016-10-19").format(dateFormat);
var date = moment(d, dateFormat);

现在date.isValid()给了我想要的结果,但是这里Moment.js日期对象被创建了两次。我怎样才能避免这种情况呢?有没有更好的解决方案?

仅供参考,我不允许更改dateFormat

能够找到解决方案。因为我得到的日期是ISO格式,只提供日期到时刻将验证它,不需要传递dateFormat。

var date = moment("2016-10-19");

然后date.isValid()给出期望的结果。

var date = moment('2016-10-19', 'DD-MM-YYYY', true);

您应该在调用moment时添加第三个参数来强制严格解析。下面是moment文档的相关部分http://momentjs.com/docs/#/parsing/string-format/它位于本节的末尾。

我刚发现一个很乱的案子。

moment('Decimal128', 'YYYY-MM-DD').isValid() // true

当日期和日期格式不同时,如何使用Moment检查字符串是否为有效日期

对不起,但是这个线程上的任何给定的解决方案实际上回答了被问到的问题吗?

我有一个字符串日期和一个不同的日期格式。例:日期:2016-10-19dateFormat:"DD-MM-YYYY"。我需要检查一下这个日期是否有效。

const date = '2016-10-19';
const dateFormat = 'DD-MM-YYYY';
const toDateFormat = moment(new Date(date)).format(dateFormat);
moment(toDateFormat, dateFormat, true).isValid();
// Note I: `new Date()` circumvents the warning that
//   Moment throws (https://momentjs.com/guides/#/warnings/js-date/),
//   but may not be optimal.
// Note II: passing `true` as third argument to `moment()` enables strict-mode
//   https://momentjs.com/guides/#/parsing/strict-mode/

但老实说,我不明白为什么moment.isDate()(如文档所示)只接受对象。在我看来,还应该支持字符串

给你:Working fiddle

$(function(){
  var dateFormat = 'DD-MM-YYYY';
  alert(moment(moment("2012-10-19").format(dateFormat),dateFormat,true).isValid());
});

我使用moment和new Date来处理undefined数据值的情况:

const date = moment(new Date("2016-10-19"));

因为:moment(undefined).isValid() == true

moment(new Date(undefined)).isValid() == false
console.log(` moment('2019-09-01', 'YYYY-MM-DD').isValid()?  ` +moment('2019-09-01', 'YYYY-MM-DD').isValid())
console.log(` moment('2019-22-01', 'YYYY-DD-MM').isValid()?  ` +moment('2019-22-01', 'YYYY-DD-MM').isValid())
console.log(` moment('2019-22-22', 'YYYY-DD-MM').isValid()?  ` +moment('2019-22-22', 'YYYY-DD-MM').isValid())
console.log(` moment('undefined', 'YYYY-DD-MM').isValid()?  ` +moment('undefined', 'YYYY-DD-MM').isValid())
 moment('2019-09-01', 'YYYY-MM-DD').isValid()?  true
 moment('2019-22-01', 'YYYY-DD-MM').isValid()?  true
 moment('2019-22-22', 'YYYY-DD-MM').isValid()?  false
 moment('undefined', 'YYYY-DD-MM').isValid()?  false

我用的是moment.js

let value = '19-05-1994';
let check = moment(value,'DD-MM-YYYY', true).isValid();
        console.log(check) //returns true
        return check

如果日期有效,则getTime()将始终等于其本身。

var date = new Date('2019-12-12');
if(date.getTime() - date.getTime() === 0) {
    console.log('Date is valid');
} else {
    console.log('Date is invalid');
}

可以使用

var d = moment("2016-10-19",dateFormat);
if(!isNaN(d)) {
  // d is a valid date.
}
moment("2022-10-18 04:00 AM", "YYYY-MM-DD HH:mm AM", true).isValid()

试试这个。这不是很好,但只要输入是日期选择器中的常量格式,它就可以工作。

在这个例子中,它是来自你的选择器的badDate

https://jsfiddle.net/xs8tvox9/

var dateFormat = 'DD-MM-YYYY'
var badDate = "2016-10-19";
var splittedDate = badDate.split('-');
if (splittedDate.length == 3) {
  var d = moment(splittedDate[2]+"-"+splittedDate[1]+"-"+splittedDate[0], dateFormat);
  alert(d.isValid())
} else {
  //incorrectFormat
}