验证日期无效日期为js

时间:2017-09-01 10:58:16

标签: javascript date

这是ASCII code

的延续

我正在尝试解析来自API的String,以便能够使用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));

有两种不同的方法,但是我创建的日期似乎都不适合js的Date API,有什么帮助吗?

4 个答案:

答案 0 :(得分:1)

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

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'));

答案 1 :(得分:0)

: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)

Demo Fiddle 1

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

Demo Fiddle 2

答案 2 :(得分:0)

试试这个

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的语言。通常,长时间戳几乎适用于所有apis。

答案 3 :(得分:-1)

因为那不是实际的日期格式。您可以根据需要使用片刻格式

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了解更多选项