如何将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