繁体   English   中英

js验证日期的无效日期

[英]Invalid Date on validation Date of js

这是上一个问题的延续

我正在尝试解析来自API的字符串,以便能够使用js API将它们解析为日期

我最终编写了这样的代码:

 var date = "01-09-2017 23:59:59"; var dateSplitted = date.split(" "); var dateSplittedBySpace = dateSplitted[0]+"T"+dateSplitted[1]+":000Z"; dateSplitted=dateSplittedBySpace.split("-"); var finalDate = dateSplitted[1]+"-"+dateSplitted[0]+"-"+dateSplitted[2]; console.log(finalDate); console.log(new Date(finalDate)); dateSplitted= date.split("-"); var yearHour= dateSplitted[2].split(" "); finalDate= yearHour[0]+"-"+dateSplitted[1]+"-"+dateSplitted[0]+"T"+yearHour[1]+":000Z"; console.log(finalDate); console.log(new Date(finalDate)); 

使用2种不同的方法,但是我创建的日期都不适合js的Date API,有帮助吗?

我认为这可以满足您的需求。

 function stringToDate(dateString) { const dateAndTime = dateString.split(' '), dateParts = dateAndTime[0].split('-'); // The array will be [01 (day), 09 (month), 2017 (year)], by reversing the // array the date parts will be in the order as needed [year, month, day]. dateParts.reverse(); const // ES6 syntax. //isoDateString = `${dateParts.join('-')} ${dateAndTime[1]}.000Z`; // Old school syntax isoDateString = dateParts.join('-') + ' ' + dateAndTime[1] + '.000Z'; return new Date(isoDateString); } console.log(stringToDate('01-09-2017 23:59:59')); console.log(stringToDate('31-12-2017 23:59:59')); 

:000Z格式错误,应为.000Z

由于您使用YYYY-MM-DD格式,因此建议您拆分所有内容并生成新的Date对象

var dateStr = "01-09-2017 23:59:59"; 
var reg = /(\d{2})-(\d{2})-(\d{4}) (\d{2}):(\d{2}):(\d{2})/;
var dateArr = reg.exec(dateStr); 
var date = dateArr[3] + "-" +
           dateArr[2] + "-" + 
           dateArr[1] + 'T' + 
           dateArr[4] + ':' + 
           dateArr[5] + ':' + 
           dateArr[6] + '.000Z';    

console.log(new Date(date));

// => Sat Sep 02 2017 02:59:59 GMT+0300 (IDT)

演示小提琴1


如果您不需要TZ,则可以删除'.000Z'

演示小提琴2

尝试这个

 array = "01-09-2017 23:59:59".split(' '); date = array[0].split('-'); time = array[1].split(':'); realDate = new Date(date[2],new Number(date[1])-1,date[0],time[0], time[1],time[2],0); console.log(realDate.toString()); 

另外,如果您告诉API也会有所帮助。 特别是api的语言。 通常,较长的时间戳将适用于几乎所有api。

由于这不是实际的日期格式。 您可以根据需要使用矩来格式化

 var date = "01-09-2017 23:59:59"; var date2 = new Date(date); var dateFormat = "YYYY-DD-MMTHH:mm:ss"; var finalDate = moment(date2).format(dateFormat); console.log(finalDate); console.log(moment.utc(date2).format(dateFormat)); //for UTC 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script> 

时刻在大多数时候都派上用场。 检查momentjs.com以获取更多选项

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM