Come posso convertire la stringa in datetime con la specifica del formato in JavaScript?

Come posso convertire una stringa in un object data time in javascript specificando una stringa di formato?

Sto cercando qualcosa come:

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

Penso che questo possa aiutarti: http://www.mattkruse.com/javascript/date/

C’è una funzione getDateFromFormat() che puoi modificare leggermente per risolvere il tuo problema.

Aggiornamento: c’è una versione aggiornata degli esempi disponibili su javascripttoolbox.com

Usa new Date( dateString ) se la tua stringa è compatibile con Date.parse() . Se il tuo formato è incompatibile (penso che lo sia), devi analizzare tu stesso la stringa (dovrebbe essere facile con le espressioni regolari) e creare un nuovo object Date con valori espliciti per anno, mese, data, ora, minuto e secondo.

@Christoph Mentions utilizza una regex per affrontare il problema. Ecco cosa sto usando:

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

Non è affatto intelligente, basta configurare la regex e il new Date(blah) in base alle proprie esigenze.

Modifica: Forse un po ‘più comprensibile in ES6 usando la destrutturazione:

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

Ma in tutta onestà in questi giorni cerco qualcosa come Moment

Nessuna routine di formattazione data / ora sofisticata esiste in JavaScript.

Dovrai utilizzare una libreria esterna per l’output di data formattato, “JavaScript Date Format” da Flagrant Badassery sembra molto promettente.

Per la conversione di input, sono già stati fatti diversi suggerimenti. 🙂

Dai un’occhiata a Moment.js . Si tratta di una libreria moderna e potente che compensa le funzioni Date (o la mancanza) di JavaScript.

Solo per una risposta aggiornata qui, c’è un buon js lib su 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"); } 

La libreria esterna è un overkill per analizzare una o due date, quindi ho creato la mia funzione utilizzando le soluzioni di Oli e Christoph . Qui in Europa centrale usiamo raramente tutto tranne il formato dell’OP, quindi questo dovrebbe essere sufficiente per le semplici app utilizzate qui.

 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])); } } 

Date.parse() è abbastanza intelligente, ma non posso garantire che il formato verrà analizzato correttamente.

Se così non fosse, dovresti trovare qualcosa per colmare i due. Il tuo esempio è piuttosto semplice (essendo puramente numeri) quindi un touch di REGEX (o persino string.split() potrebbe essere più veloce) abbinato a qualche parseInt() ti permetterà di creare rapidamente una data.

Solo per dare i miei 5 centesimi.

Il mio formato data è gg.mm.aaaa (formato UK) e nessuno degli esempi sopra ha funzionato per me. Tutti i parser consideravano mm come giorno e dd come mese.

Ho trovato questa libreria: http://joey.mazzarelli.com/2008/11/25/easy-date-parsing-with-javascript/ e ha funzionato, perché puoi dire l’ordine dei campi come questo:

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

Spero che aiuti qualcuno.

Moment.js gestirà questo:

 var momentDate = moment('23.11.2009 12:34:56', 'DD.MM.YYYY HH:mm:ss'); var date = momentDate.; 

Per soddisfare completamente la stringa di conversione Date.parse in formato gg-mm-AAAA come specificato in RFC822, se si utilizza yyyy-mm-dd parse si possono commettere errori.

 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