Come posso convertire una stringa in un oggetto data / ora 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");
Come posso convertire una stringa in un oggetto data / ora 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");
Risposte:
Penso che questo possa aiutarti: http://www.mattkruse.com/javascript/date/
C'è una getDateFromFormat()
funzione che puoi modificare leggermente per risolvere il tuo problema.
Aggiornamento: è disponibile una versione aggiornata degli esempi su javascripttoolbox.com
TypeError: Object Date has no method 'getDateFromFormat'
Utilizzare se la stringa è compatibile con . 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 oggetto Date con valori espliciti per anno, mese, data, ora, minuto e secondo.new Date(dateString)
Date.parse()
@Christoph Menzioni usando 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 regex e new Date(blah)
soddisfare le tue 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
/g
bandiera, solo per impostare lastIndex
in 0
seguito? Basta non usare una partita globale.
/g
Era una copia / incolla trascurata da un progetto esistente. lastindex
è stato aggiunto da un editore (per combattere il \g
suppongo?). Li rimuoverò ora. Grazie per averlo sottolineato.
In JavaScript non esistono routine di formattazione data / ora sofisticate.
Dovrai utilizzare una libreria esterna per l'output formattato della data, "Formato data JavaScript" di Flagrant Badassery sembra molto promettente.
Per la conversione di input, sono già stati fatti diversi suggerimenti. :)
Dai un'occhiata a Moment.js . È una libreria moderna e potente che compensa le funzioni dolorose della data di JavaScript (o la sua mancanza).
Solo per una risposta aggiornata qui, c'è una buona js lib su http://www.datejs.com/
Datejs è una libreria di date JavaScript open source per l'analisi, la formattazione e l'elaborazione.
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 problema per l'analisi di una o due date, quindi ho fatto la mia funzione usando le soluzioni di Oli e Christoph . Qui in Europa centrale usiamo raramente tutto tranne il formato del PO, 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.
In caso contrario, dovresti trovare qualcosa per colmare i due. Il tuo esempio è piuttosto semplice (essendo puramente numeri), quindi un tocco di REGEX (o anche string.split()
- potrebbe essere più veloce) abbinato ad alcuni parseInt()
ti permetterà di fissare rapidamente una data.
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
Solo per dare i miei 5 centesimi.
Il formato della mia data è gg.mm.aaaa (formato Regno Unito) e nessuno degli esempi precedenti ha funzionato per me. Tutti i parser stavano considerando mm come giorno e gg 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 in questo modo:
>>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.;
È possibile utilizzare la libreria moment.js per questo. Sto usando solo per ottenere un output specifico per il tempo ma è possibile selezionare il tipo di formato che si desidera selezionare.
Riferimento:
1. libreria moment: https://momentjs.com/
2. funzioni specifiche di data e ora: https://timestamp.online/article/how-to-convert-timestamp-to-datetime-in-javascript
convertDate(date) {
var momentDate = moment(date).format('hh : mm A');
return momentDate;
}
e puoi chiamare questo metodo come:
this.convertDate('2020-05-01T10:31:18.837Z');
Spero possa essere d'aiuto. Goditi la programmazione.
Per soddisfare pienamente la stringa di conversione Date.parse nel formato gg-mm-AAAA come specificato in RFC822, se si utilizza l'analisi yyyy-mm-gg, è possibile che si verifichino errori.
//Here pdate is the string date time
var date1=GetDate(pdate);
function GetDate(a){
var dateString = a.substr(6);
var currentTime = new Date(parseInt(dateString ));
var month =("0"+ (currentTime.getMonth() + 1)).slice(-2);
var day =("0"+ currentTime.getDate()).slice(-2);
var year = currentTime.getFullYear();
var date = day + "/" + month + "/" + year;
return date;
}