Wie kann ich ein Datum mit dem Format JJJJ-MM-TT von einem ISO 8601- Datum erhalten?
Mein 8601 Datum ist
2013-03-10T02:00:00Z
Wie kann ich folgendes bekommen?
2013-03-10
date.split("T")[0]
würde tun
Wie kann ich ein Datum mit dem Format JJJJ-MM-TT von einem ISO 8601- Datum erhalten?
Mein 8601 Datum ist
2013-03-10T02:00:00Z
Wie kann ich folgendes bekommen?
2013-03-10
date.split("T")[0]
würde tun
Antworten:
Versuche dies
date = new Date('2013-03-10T02:00:00Z');
date.getFullYear()+'-' + (date.getMonth()+1) + '-'+date.getDate();//prints expected format.
Aktualisieren:-
Wie in den Kommentaren erwähnt, aktualisiere ich die Antwort, um bei Bedarf führende Nullen für Datum und Monat zu drucken.
date = new Date('2013-08-03T02:00:00Z');
year = date.getFullYear();
month = date.getMonth()+1;
dt = date.getDate();
if (dt < 10) {
dt = '0' + dt;
}
if (month < 10) {
month = '0' + month;
}
console.log(year+'-' + month + '-'+dt);
Schneiden Sie einfach die Schnur:
var date = new Date("2013-03-10T02:00:00Z");
date.toISOString().substring(0, 10);
Oder wenn Sie nur ein Datum außerhalb der Zeichenfolge benötigen.
var strDate = "2013-03-10T02:00:00Z";
strDate.substring(0, 10);
YYYYY-MM-DD
beschädigt wird, da das Format im Jahr 10000 liegt. Um dies zu vermeiden, können Sie das aufteilen T
Zeichen stattdessen. (Siehe en.wikipedia.org/wiki/Year_10,000_problem )
Sie könnten auschecken Moment.js , Luxon , date-fns oder Day.js für eine nette Datumsmanipulation auschecken .
Oder extrahieren Sie einfach den ersten Teil Ihrer ISO-Zeichenfolge, er enthält bereits das, was Sie möchten. Hier ist ein Beispiel durch Aufteilen auf dieT
:
"2013-03-10T02:00:00Z".split("T")[0] // "2013-03-10"
Moment.js übernimmt die Datumsformatierung für Sie. Hier erfahren Sie, wie Sie es über ein JavaScript-Tag einfügen und wie Sie mit Moment.js ein Datum formatieren.
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>
moment("2013-03-10T02:00:00Z").format("YYYY-MM-DD") // "2013-03-10"
.toISODateString()
, weil es sehr häufig vorkommt ...
Dies ist, was ich tue, um nur Datum zu bekommen:
let isoDate = "2013-03-10T02:00:00Z";
alert(isoDate.split("T")[0]);
Moment.js ist eine ziemlich große Bibliothek, die für einen einzelnen Anwendungsfall verwendet werden kann. Ich empfehle date-fns
stattdessen zu verwenden. Es bietet im Grunde die meisten Funktionen von Moment.js mit einer viel kleineren Bundle-Größe und vielen formatting options
.
import format from 'date-fns/format'
format('2013-03-10T02:00:00Z', 'YYYY-MM-DD'); // 2013-03-10, YYYY-MM-dd for 2.x
Da es sich um das ISO 8601- Zeitformat handelt, konvertiert der Browser im Allgemeinen von der UTC-Zeit in die lokale Zeitzone. Dies ist jedoch ein einfacher Anwendungsfall, in dem Sie dies wahrscheinlich tun können'2013-03-10T02:00:00Z'.substring(0, 10);
.
Für komplexere Konvertierungen date-fns
ist der Weg zu gehen.
let isoDate = "2013-03-10T02:00:00Z";
var d = new Date(isoDate);
d.toLocaleDateString('en-GB'); // dd/mm/yyyy
d.toLocaleDateString('en-US'); // mm/dd/yyyy
Übergeben Sie Ihr Datum im Datumsobjekt:
var d = new Date('2013-03-10T02:00:00Z');
d.toLocaleDateString().replace(/\//g, '-');
Für alle, die Split-, Slice- und andere auf Zeichenfolgen basierende Versuche verwenden, um das Datum zu ermitteln, können Sie sich auf zeitzonenbezogene Fehler einstellen!
Ein ISO-String hat eine Zulu-Zeitzone und ein Datum gemäß dieser Zeitzone. Dies bedeutet, dass möglicherweise ein Datum einen Tag vor oder später vor der tatsächlichen Zeitzone verwendet wird, das Sie in Ihrer Transformationskette berücksichtigen müssen.
Siehe dieses Beispiel:
const timeZoneRelatedDate = new Date(2020, 0, 14, 0, 0);
console.log(timeZoneRelatedDate.toLocaleDateString(
'ja-JP',
{
year: 'numeric',
month: '2-digit',
day: '2-digit'
}
).replace(/\//gi,'-'));
// RESULT: "2020-01-14"
console.log(timeZoneRelatedDate.toISOString());
// RESULT: "2020-01-13T23:00:00.000Z" (for me in UTC+1)
console.log(timeZoneRelatedDate.toISOString().slice(0,10));
// RESULT: "2020-01-13"
Wenn Sie ein Datumsobjekt haben:
let date = new Date()
let result = date.toISOString().split`T`[0]
console.log(result)
oder
let date = new Date()
let result = date.toISOString().slice(0, 10)
console.log(result)
So erweitern Sie die Lösung von rk rk : Wenn das Format die Zeit enthalten soll, können Sie die toTimeString()
zu Ihrer Zeichenfolge hinzufügen und dann den GMT-Teil wie folgt entfernen:
var d = new Date('2013-03-10T02:00:00Z');
var fd = d.toLocaleDateString() + ' ' + d.toTimeString().substring(0, d.toTimeString().indexOf("GMT"));
Ich habe das benutzt:
HTMLDatetoIsoDate(htmlDate){
let year = Number(htmlDate.toString().substring(0, 4))
let month = Number(htmlDate.toString().substring(5, 7))
let day = Number(htmlDate.toString().substring(8, 10))
return new Date(year, month - 1, day)
}
isoDateToHtmlDate(isoDate){
let date = new Date(isoDate);
let dtString = ''
let monthString = ''
if (date.getDate() < 10) {
dtString = '0' + date.getDate();
} else {
dtString = String(date.getDate())
}
if (date.getMonth()+1 < 10) {
monthString = '0' + Number(date.getMonth()+1);
} else {
monthString = String(date.getMonth()+1);
}
return date.getFullYear()+'-' + monthString + '-'+dtString
}
Quelle: http://gooplus.fr/de/2017/07/13/angular2-typescript-isodate-to-html-date/
var d = new Date("Wed Mar 25 2015 05:30:00 GMT+0530 (India Standard Time)");
alert(d.toLocaleDateString());
let dt = new Date('2013-03-10T02:00:00Z');
let dd = dt.getDate();
let mm = dt.getMonth() + 1;
let yyyy = dt.getFullYear();
if (dd<10) {
dd = '0' + dd;
}
if (mm<10) {
mm = '0' + mm;
}
return yyyy + '-' + mm + '-' + dd;
Eine bessere Version der Antwort von @Hozefa .
Wenn Sie date-fns
installiert haben, können Sie die formatISO- Funktion verwenden
const date = new Date(2019, 0, 2)
import { formatISO } from 'date-fns'
formatISO(date, { representation: 'date' }) // '2019-01-02' string
Verwenden Sie den folgenden Code. Es ist nützlich für Sie.
let currentDate = new Date()
currentDate.toISOString()