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

Mritunjay
quelle
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);
DriveByPoster
quelle
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"
Harris
quelle
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]);

Aravindh Gopi
quelle
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.

Hozefa
quelle
5

Verwenden:

new Date().toISOString().substring(0, 10);
Ankita
quelle
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

Ammar H Alshaar
quelle
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);
sebhs
quelle
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, '-');
rk rk
quelle
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"
Witz
quelle
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)

Илья Зеленько
quelle
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"));
Airwavezx
quelle
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/

Alan
quelle
0

    var d = new Date("Wed Mar 25 2015 05:30:00 GMT+0530 (India Standard Time)");
    alert(d.toLocaleDateString());

Abilash Raghu
quelle
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;
Speicherleck
quelle
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
Asiniy
quelle
-4

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

let currentDate = new Date()
currentDate.toISOString()
Mohammad Bilal
quelle