如何将string转换为date时间格式规范在JavaScript中?

如何通过指定格式string将string转换为JavaScript中的date时间对象?

我正在寻找像这样的东西:

var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss"); 

我认为这可以帮助你: http : //www.mattkruse.com/javascript/date/

有一个getDateFromFormat()函数,你可以稍微调整一下来解决你的问题。

更新:在javascripttoolbox.com上有更新版本的示例

如果您的string与Date.parse()兼容,请使用new Date( dateString ) Date.parse() 。 如果你的格式不兼容(我认为是这样),你必须自己parsingstring(用正则expression式应该很容易),并用年,月,日,时,分和秒的显式值创build一个新的Date对象 。

@Christoph提到使用正则expression式来解决这个问题。 以下是我正在使用的:

 var dateString = "2010-08-09 01:02:03"; var reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/; var dateArray = reggie.exec(dateString); var dateObject = new Date( (+dateArray[1]), (+dateArray[2])-1, // Careful, month starts at 0! (+dateArray[3]), (+dateArray[4]), (+dateArray[5]), (+dateArray[6]) ); 

这绝不是智能的,只需configuration正则expression式和new Date(blah)以满足您的需求。

编辑:也许在ES6中使用解构更容易理解:

 let dateString = "2010-08-09 01:02:03" , reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/ , [, year, month, day, hours, minutes, seconds] = reggie.exec(dateString) , dateObject = new Date(year, month-1, day, hours, minutes, seconds); 

但是现在我诚实地接触到了像Moment这样的东西

JavaScript中不存在复杂的date/时间格式化例程。

您将不得不使用外部库进行格式化date输出,来自Flagrant Badassery的“JavaScriptdate格式”看起来非常有希望。

对于input转换,已经提出了一些build议。 🙂

看看Moment.js 。 这是一个现代和强大的图书馆,弥补了JavaScript的可悲datefunction(或缺乏)。

只是为了在这里更新的答案,有一个很好的js库在http://www.datejs.com/

 var temp1 = ""; var temp2 = ""; var str1 = fd; var str2 = td; var dt1 = str1.substring(0,2); var dt2 = str2.substring(0,2); var mon1 = str1.substring(3,5); var mon2 = str2.substring(3,5); var yr1 = str1.substring(6,10); var yr2 = str2.substring(6,10); temp1 = mon1 + "/" + dt1 + "/" + yr1; temp2 = mon2 + "/" + dt2 + "/" + yr2; var cfd = Date.parse(temp1); var ctd = Date.parse(temp2); var date1 = new Date(cfd); var date2 = new Date(ctd); if(date1 > date2) { alert("FROM DATE SHOULD BE MORE THAN TO DATE"); } 

Date.parse()是相当智能的,但我不能保证格式将parsing正确。

如果没有,你必须find一些桥梁。 你的例子非常简单(纯粹是数字),所以一点REGEX(或甚至string.split() – 可能会更快)与一些parseInt()配对,将允许您快速创build一个date。

外部库是parsing一个或两个date的矫枉过正,所以我使用Oli和Christoph的解决scheme来创build自己的函数。 在欧洲中部,我们很less使用OP的格式,所以对于这里使用的简单应用来说,这应该是足够的。

 function ParseDate(dateString) { //dd.mm.yyyy, or dd.mm.yy var dateArr = dateString.split("."); if (dateArr.length == 1) { return null; //wrong format } //parse time after the year - separated by space var spacePos = dateArr[2].indexOf(" "); if(spacePos > 1) { var timeString = dateArr[2].substr(spacePos + 1); var timeArr = timeString.split(":"); dateArr[2] = dateArr[2].substr(0, spacePos); if (timeArr.length == 2) { //minutes only return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1])); } else { //including seconds return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1]), parseInt(timeArr[2])) } } else { //gotcha at months - January is at 0, not 1 as one would expect return new Date(parseInt(dateArr[2]), parseInt(dateArr[1] - 1), parseInt(dateArr[0])); } } 

只是给我5美分。

我的date格式是dd.mm.yyyy(英国格式),上面的例子都没有为我工作。 所有的parsing器都把mm看作是一天,dd看作是一个月。

我find了这个库: http : //joey.mazzarelli.com/2008/11/25/easy-date-parsing-with-javascript/它的工作,因为你可以说这样的领域的顺序:

 >>console.log(new Date(Date.fromString('09.05.2012', {order: 'DMY'}))); Wed May 09 2012 00:00:00 GMT+0300 (EEST) 

我希望能帮助别人。

为了完全满足Date.parse转换string的格式为dd-mm-YYYY,在RFC822中指定,如果使用yyyy-mm-ddparsing可能会出错。

Moment.js将处理这个问题:

 var momentDate = moment('23.11.2009 12:34:56', 'DD.MM.YYYY HH:mm:ss'); var date = momentDate.; 
 time = "2017-01-18T17:02:09.000+05:30" t = new Date(time) hr = ("0" + t.getHours()).slice(-2); min = ("0" + t.getMinutes()).slice(-2); sec = ("0" + t.getSeconds()).slice(-2); t.getFullYear()+"-"+t.getMonth()+1+"-"+t.getDate()+" "+hr+":"+min+":"+sec