为什么新的Date(“ CNE-TEST-0000056”)不是无效的日期?

时间:2018-06-25 16:35:09

标签: javascript node.js date

我正在研究报告生成模块,并且正在检查每个记录中的值是否为格式化目的而记录日期。

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"不是日期。

1 个答案:

答案 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解析来做到这一点,我认为这需要对我在上面的示例中显示的数据进行额外的检查