Wie kann ich eine Zeichenfolge in ein Datums- / Uhrzeitobjekt in Javascript konvertieren, indem ich eine Formatzeichenfolge angeben?
Ich suche so etwas wie:
var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss");
Wie kann ich eine Zeichenfolge in ein Datums- / Uhrzeitobjekt in Javascript konvertieren, indem ich eine Formatzeichenfolge angeben?
Ich suche so etwas wie:
var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss");
Antworten:
Ich denke, das kann Ihnen helfen: http://www.mattkruse.com/javascript/date/
Es gibt eine getDateFromFormat()
Funktion, die Sie ein wenig optimieren können, um Ihr Problem zu lösen.
Update: Eine aktualisierte Version der Beispiele finden Sie unter javascripttoolbox.com
TypeError: Object Date has no method 'getDateFromFormat'
Verwenden Sie diese Option, wenn Ihre Zeichenfolge mit kompatibel ist . Wenn Ihr Format nicht kompatibel ist (ich denke es ist), müssen Sie die Zeichenfolge selbst analysieren (sollte mit regulären Ausdrücken einfach sein) und ein neues Datumsobjekt mit expliziten Werten für Jahr, Monat, Datum, Stunde, Minute und Sekunde erstellen .new Date(dateString)
Date.parse()
@Christoph Erwähnt die Verwendung eines regulären Ausdrucks, um das Problem anzugehen. Folgendes verwende ich:
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])
);
Es ist keineswegs intelligent, konfigurieren Sie einfach den regulären Ausdruck und new Date(blah)
passen Sie ihn Ihren Anforderungen an.
Bearbeiten: Vielleicht etwas verständlicher in ES6 mit Destrukturierung:
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);
Aber ehrlich gesagt greife ich heutzutage nach etwas wie Moment
/g
Flagge, um lastIndex
sie 0
danach zu setzen ? Verwenden Sie einfach keine globale Übereinstimmung.
/g
war ein schlampiges Kopieren / Einfügen aus einem vorhandenen Projekt. lastindex
wurde von einem Editor hinzugefügt (um das zu bekämpfen, \g
nehme ich an?). Ich werde sie jetzt entfernen. Vielen Dank für den Hinweis.
In JavaScript gibt es keine ausgeklügelten Formatierungsroutinen für Datum und Uhrzeit.
Sie müssen eine externe Bibliothek für die formatierte Datumsausgabe verwenden. "JavaScript Date Format" von Flagrant Badassery sieht sehr vielversprechend aus.
Für die Eingabekonvertierung wurden bereits mehrere Vorschläge gemacht. :) :)
Schauen Sie sich Moment.js an . Es ist eine moderne und leistungsstarke Bibliothek, die die traurigen Datumsfunktionen von JavaScript (oder deren Fehlen) ausgleicht.
Nur für eine aktualisierte Antwort hier gibt es eine gute js lib unter http://www.datejs.com/
Datejs ist eine Open-Source-JavaScript-Datumsbibliothek zum Parsen, Formatieren und Verarbeiten.
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");
}
Die externe Bibliothek ist ein Overkill für das Parsen von ein oder zwei Daten, daher habe ich meine eigene Funktion mit den Lösungen von Oli und Christoph erstellt . Hier in Mitteleuropa verwenden wir selten etwas anderes als das OP-Format, daher sollte dies für einfache Apps ausreichen, die hier verwendet werden.
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()
ist ziemlich intelligent, aber ich kann nicht garantieren, dass das Format korrekt analysiert wird.
Wenn nicht, müssten Sie etwas finden, um die beiden zu überbrücken. Ihr Beispiel ist ziemlich einfach (es handelt sich nur um Zahlen), sodass Sie mit einem Hauch von REGEX (oder sogar string.split()
- möglicherweise schneller) in Kombination mit einigen parseInt()
schnell ein Datum festlegen können .
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
Nur um meine 5 Cent zu geben.
Mein Datumsformat ist TT.MM.JJJJ (UK-Format) und keines der oben genannten Beispiele hat für mich funktioniert. Alle Parser betrachteten mm als Tag und dd als Monat.
Ich habe diese Bibliothek gefunden: http://joey.mazzarelli.com/2008/11/25/easy-date-parsing-with-javascript/ und es hat funktioniert, weil Sie die Reihenfolge der Felder wie folgt sagen können:
>>console.log(new Date(Date.fromString('09.05.2012', {order: 'DMY'})));
Wed May 09 2012 00:00:00 GMT+0300 (EEST)
Ich hoffe das hilft jemandem.
Moment.js wird dies erledigen:
var momentDate = moment('23.11.2009 12:34:56', 'DD.MM.YYYY HH:mm:ss');
var date = momentDate.;
Sie können hierfür die Bibliothek moment.js verwenden. Ich verwende nur, um eine zeitspezifische Ausgabe zu erhalten, aber Sie können auswählen, welche Art von Format Sie auswählen möchten.
Referenz:
1. Moment Bibliothek: https://momentjs.com/
2. Zeit- und datumsspezifische Funktionen: https://timestamp.online/article/how-to-convert-timestamp-to-datetime-in-javascript
convertDate(date) {
var momentDate = moment(date).format('hh : mm A');
return momentDate;
}
und Sie können diese Methode wie folgt aufrufen:
this.convertDate('2020-05-01T10:31:18.837Z');
Ich hoffe, es hilft. Viel Spaß beim Codieren.
Wenn Sie die Konjunkturzeichenfolge Date.parse vollständig in das Format TT-MM-JJJJ wie in RFC822 angegeben konvertieren, kann es zu Fehlern kommen, wenn Sie die Analyse JJJJ-MM-TT verwenden.
//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;
}