Konvertieren Sie ein ISO-Datum in das Datumsformat JJJJ-MM-TT in JavaScript


108

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

2
Haben Sie tatsächlich versucht, es zu tun? Dies ist keine neue Frage, die mehrfach beantwortet wurde.
bPratik


14
date.split("T")[0]würde tun
Aravindh Gopi

Antworten:


99

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


17
Beachten Sie, ich glaube nicht, dass dies eine führende Null für Tag oder Monat
drucken wird

2
Stimmen Sie mit @ user3413723 überein, dies beantwortet die Frage nicht, da es die führende 0 entfernt und daher nicht den Anforderungen des JJJJ-MM-TT-Formats entspricht
James Murphy

Funktioniert gut @Mritunjay
Ravi Delixan

Dies ist länger und typenanfälliger als die Antwort von DriveByPoster. Aber ich werde keine Ablehnung geben, weil es sprachunabhängiger ist. Es werden einfach nicht die einfachen Werkzeuge verwendet, die uns zur Verfügung stehen.
RoboticRenaissance

Sir, können Sie mir bitte sagen, wie ich 2013 3 1 dieses Format Datum in neuem Datum (Datum)
Kapil soni

140

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

3
Ich denke, dies ist die einfachste und eleganteste Lösung von allen, aber gibt es hier einen Nachteil dafür?
Aida_Aida

29
@Aida_Aida Das einzige Problem, an das ich denken kann, ist, dass wenn Ihr Code in Zukunft mindestens 8000 Jahre mit geologischer Zeit arbeitet, Ihr Code möglicherweise YYYYY-MM-DDbeschädigt wird, da das Format im Jahr 10000 liegt. Um dies zu vermeiden, können Sie das aufteilen TZeichen stattdessen. (Siehe en.wikipedia.org/wiki/Year_10,000_problem )
Apsiller

9
Auf diese Weise werden Zeitzonen nicht korrekt behandelt, da der ISOString UTC ist, das Date-Objekt jedoch lokal. Sie müssen dies berücksichtigen.
Guillaume F.

3
@ GuillaumeF. eine wichtige Überlegung, aber es entspricht den Anforderungen von OP
Jamesjansson

Ich kann nicht verstehen, warum die Zeichenfolge auf ein Datum analysiert werden sollte. Die Teilzeichenfolge- Option scheint die einfachste Antwort zu sein.
RobG


14

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"

Während dieses Code-Snippet die Frage lösen kann, hilft eine Erklärung wirklich, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in Zukunft beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen. Bitte versuchen Sie auch, Ihren Code nicht mit erklärenden Kommentaren zu überfüllen, da dies die Lesbarkeit sowohl des Codes als auch der Erklärungen beeinträchtigt!
Auf Wiedersehen StackExchange

2
momentist eine ziemlich große Bibliothek, die nur zum Formatieren verwendet werden kann. Verwenden Sie lieber date-fns, die viel kleiner sind und die gleiche Funktionalität bieten .
Hozefa

@Hozefa, dann beantworte die OP-Frage mit deiner Lösung.
Harris

1
@ Harris - hat den Job reibungslos gemacht!
HadidAli

Ich wünschte, der Moment hätte eine Funktion wie .toISODateString(), weil es sehr häufig vorkommt ...
Lev Lukomsky

12

Dies ist, was ich tue, um nur Datum zu bekommen:

let isoDate = "2013-03-10T02:00:00Z";

alert(isoDate.split("T")[0]);


2
Dies ist die erste Antwort, die die split () - Idee tatsächlich als Antwortantwort vorschlägt, soweit ich das beurteilen kann, und ich mag diese Lösung für den Aufwand vs. Zuverlässigkeit vs. Effektivfaktor, obwohl ich moment () überall dort verwende, wo ich kann.
rainabba

toISOString verwendet UTC, das das falsche lokale Datum für den Zeitraum des lokalen Zeitzonenversatzes ab Mitternacht erzeugt. - RobG
Michael Dimmitt

9

Moment.js ist eine ziemlich große Bibliothek, die für einen einzelnen Anwendungsfall verwendet werden kann. Ich empfehle date-fnsstattdessen 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-fnsist der Weg zu gehen.


5

Verwenden:

new Date().toISOString().substring(0, 10);

5

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


d.toLocaleDateString ('en-GB'); klappt wunderbar. Gute Antwort!
Donald Shahini

4

Dadurch wird das Datum im Format JJJJ-MM-TT ausgegeben:

let date = new Date();
date = date.toISOString().slice(0,10);

Ich weiß nicht, warum dies nicht mehr Stimmen bekommt, es hat perfekt funktioniert und die Frage mit minimalem Aufwand beantwortet
Wolfiebae

4

Übergeben Sie Ihr Datum im Datumsobjekt:

var d = new Date('2013-03-10T02:00:00Z');
d.toLocaleDateString().replace(/\//g, '-');

1
toLocaleDateString () gibt im Format "/" aus. Nicht "-" Format.
TechCrunch

Sie können das oben Gesagte durch Ersetzen von "/" durch "-" verwenden. Nicht das eleganteste, wenn sich toLocaleDateString jemals ändert
James Murphy

Das Ergebnis von toLocaleDateString ist nicht für alle Benutzer konsistent und führt möglicherweise nicht zu dem vom OP geforderten Ergebnis.
RobG

4

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"

3

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)


1
toISOString verwendet UTC, das das falsche lokale Datum für den Zeitraum des lokalen Zeitzonenversatzes ab Mitternacht erzeugt.
RobG

1

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

0

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/



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

0

Eine bessere Version der Antwort von @Hozefa .

Wenn Sie date-fnsinstalliert 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

-4

Verwenden Sie den folgenden Code. Es ist nützlich für Sie.

let currentDate = new Date()
currentDate.toISOString()
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.