检查JavaScript字符串是否表示日期

时间:2017-05-30 13:33:17

标签: javascript

我一直在检查字符串是否代表"Tue May 16 2017 00:00:00 GMT+0400 (Georgian Standard Time)"。目前,我需要检查此字符串Date是否代表var tryConvert = new Date(input); var tryMonth = tryConvert.getMonth(); if (!(tryMonth !== tryMonth)) {//checking for NaN return true; } 。我写了以下代码:

96

问题是输入可以是整数Date并且它成功返回true。理想的行为是,它应仅适用于ISO个实例,/\d\d\d\d\-\d\d\-\d\dT\d\d\:\d\d\:\d\d/g字符串Date.toString()"Tue May 16 2017 00:00:00 GMT+0400 (Georgian Standard Time)"字符串,如function isDate(input) { if (!input) { return false; } if (input instanceof Date) { return true; } var rx = /\d\d\d\d\-\d\d\-\d\dT\d\d\:\d\d\:\d\d/g; var time = rx.exec(input); if (time) { return true; } if (typeof input === 'string' || input instanceof String) { var tryConvert = new Date(input); var tryMonth = tryConvert.getMonth(); if (!(tryMonth !== tryMonth)) { return true; } } return false; }; 。我怎样才能做到这一点?

为了更清楚,这里是完整的代码:

SELECT anagrafe.MARCHIO, anagrafe.BOLO, anagrafe.NUMERO_AZIENDALE, visite.COLLOCAZIONE, visite.DATA_PREVISTA_PARTO, visite.DATA_VISITA  
FROM anagrafe LEFT JOIN visite USING(NUMERO_AZIENDALE) 
WHERE 
visite.STATO_VISITA ='Gravida' 
AND visite.DATA_PREVISTA_PARTO > '2017-04-01' 
AND visite.DATA_VISITA  = 
(SELECT MAX(visite_2.DATA_VISITA) 
FROM anagrafe_2 
LEFT JOIN visite_2 USING(NUMERO_AZIENDALE) 
WHERE anagrafe_2.NUMERO_AZIENDALE = anagrafe.NUMERO_AZIENDALE)

1 个答案:

答案 0 :(得分:1)

对于您的用例,如果input是一个字符串,并检查它是否是一个可解析的数字,那么结合您的检查就可以了。

在这里,我添加了此检查,您可以在其中检查input是否为字符串:

if ((typeof input === 'string' || input instanceof String) && isNaN(input)) {
    var tryConvert = new Date(input);
    var tryMonth = tryConvert.getMonth();
    if (!(tryMonth !== tryMonth)) {
        return true;
    }
}

return false;

基本上,如果false是包含input96或任何其他可解析数字但实际日期字符串(例如5555)的字符串,则返回Tue May 16 2017 00:00:00 GMT+0400 (Georgian Standard Time)不是可解析的数字,因此他们将通过isNaN()检查并继续进行转换测试。

您也可以删除RegExp测试,因为它只测试一种特定的日期格式。

相关问题