我正在研究报告生成模块,并且正在检查每个记录中的值是否为格式化目的而记录日期。
var records = [{
recordNumber : "CNE-TEST-00056",
name : "Test Name 1",
createdAt: "2018-03-12"
}, {
recordNumber : "CNE-TEST-00057",
name : "Test Name 2",
createdAt: "2018-01-26T18:30:00.000Z"
}];
这些是我报告中的记录。每个对象中的键都是动态的,我想知道它们实际上是什么类型。
我正在尝试使用下面的函数来了解类型Date
。
function isDate(date){
var date1 = new Date(date);
if(isNaN(date1.getFullYear()) || date1.getFullYear() == 1970){
return false;
}
return true;
}
当我执行new Date("CNE-TEST-00056")
时,从技术上讲应该返回我Invalid Date
,而new Date("CNE-TEST-00056").getFullYear()
应该返回NaN
。但它返回Sun Jan 01 1956 00:00:00 GMT+0530
。
我怎么能说"CNE-TEST-00056"
不是日期。
答案 0 :(得分:0)
对于您的特定示例,您可以使用一些小技巧来确定它。
代码段-> https://snipp.ly/xo2ib7Bi
function isDate(date){
var date1 = new Date(date);
if(isNaN(date1.getFullYear()) || date1.getFullYear() == 1970 || date.replace(/[^A-Z]/gi, "").length > 2){
return false;
}
return true;
}
这会在您的if语句中添加额外的检查,该检查将替换不是字母的所有内容并获得计数。因此,当对CNE-TEST-0057执行此操作时,计数为7,而对于2018-01-26T18:30:00.000Z而言,``T''和``Z''的计数为2。这不是完全的证明,因为像C-T-00057这样的东西会通过。我认为没有办法通过javascript的Date解析来做到这一点,我认为这需要对我在上面的示例中显示的数据进行额外的检查