355 Stimmen

Wie formatiert man ein UTC-Datum als `YYYY-MM-DD hh:mm:ss` String mit NodeJS?

Mit NodeJS möchte ich eine Date in das folgende String-Format umzuwandeln:

var ts_hms = new Date(UTC);
ts_hms.format("%Y-%m-%d %H:%M:%S");

Wie kann ich das tun?

725voto

chbrown Punkte 11109

Wenn Sie Node.js verwenden, sind Sie sicher, dass Sie EcmaScript 5 haben, und so hat Date eine toISOString Methode. Sie fordern eine leichte Änderung der ISO8601:

new Date().toISOString()
> '2012-11-04T14:51:06.157Z'

Schneiden Sie also einfach ein paar Dinge heraus, und schon sind Sie fertig:

new Date().toISOString().
  replace(/T/, ' ').      // replace T with a space
  replace(/\..+/, '')     // delete the dot and everything after
> '2012-11-04 14:55:45'

Oder, in einer Zeile: new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '')

ISO8601 ist notwendigerweise UTC (was auch durch das nachgestellte Z im ersten Ergebnis angezeigt wird), so dass Sie standardmäßig UTC erhalten (was immer eine gute Sache ist).

134voto

Julian Knight Punkte 4498

UPDATE 2021-10-06: Hinzufügen von Day.js und Entfernen von fehlerhaftem Edit von @ashleedawg
UPDATE 2021-04-07: Luxon wurde von @Tampa hinzugefügt.
UPDATE 2021-02-28: Moment.js wird nun nicht mehr aktiv weiterentwickelt. Es wird nicht so schnell verschwinden, weil es in so viele andere Dinge eingebettet ist. Die Website hat einige Empfehlungen für Alternativen und eine Erklärung, warum.
UPDATE 2017-03-29: Datum-fns hinzugefügt, einige Anmerkungen zu Moment und Datejs
UPDATE 2016-09-14: SugarJS hinzugefügt, die einige ausgezeichnete Datum/Zeit-Funktionen zu haben scheint.


OK, da niemand eine wirkliche Antwort gegeben hat, hier ist meine.

Eine Bibliothek ist sicherlich die beste Lösung, um Datums- und Zeitangaben auf standardisierte Weise zu behandeln. Bei Datums-/Zeitberechnungen gibt es viele Grenzfälle, so dass es nützlich ist, die Entwicklung an eine Bibliothek abgeben zu können.

Hier ist eine Liste der wichtigsten Knotenpunkt kompatible Bibliotheken zur Zeitformatierung:

  • Tag.js [ hinzugefügt 2021-10-06 ] "Schnelle 2kB Alternative zu Moment.js mit der gleichen modernen API"
  • Luxon [ hinzugefügt 2017-03-29, Dank an Tampa ] "Ein leistungsstarker, moderner und freundlicher Wrapper für JavaScript-Datums- und Zeitangaben." - MomentJS von Grund auf neu aufgebaut mit unveränderlichen Typen, Verkettung und vieles mehr.
  • Moment.js [ Dank an Mustafa ] "Eine leichtgewichtige (4.3k) Javascript-Datumsbibliothek zum Parsen, Manipulieren und Formatieren von Daten" - Enthält Internationalisierung, Berechnungen und relative Datumsformate - Update 2017-03-29 : Nicht mehr ganz so leichtgewichtig, aber immer noch die umfassendste Lösung, vor allem, wenn Sie Unterstützung für Zeitzonen benötigen. - Aktualisierung 2021-02-28 : Nicht mehr in aktiver Entwicklung.
  • datum-fns [ hinzugefügt 2017-03-29, Dank an Fractalf ] Klein, schnell, arbeitet mit Standard-JS-Datumsobjekten. Tolle Alternative zu Moment, wenn Sie keine Unterstützung für Zeitzonen benötigen.
  • SugarJS - Eine allgemeine Hilfsbibliothek, die den in JavaScripts eingebauten Objekttypen dringend benötigte Funktionen hinzufügt. Enthält einige hervorragend aussehende Datum/Zeit-Funktionen.
  • strftime - Genau wie es da steht, schön und einfach
  • dateutil - Dies ist diejenige, die ich vor MomentJS verwendet habe
  • node-formatdate
  • TimeTraveller - Time Traveller" bietet eine Reihe von Hilfsmethoden für den Umgang mit Daten. Vom Addieren und Subtrahieren bis hin zum Formatieren. Time Traveller erweitert nur Datumsobjekte, die es selbst erstellt, ohne den globalen Namensraum zu verschmutzen."
  • Tempus [ Dank an Dan D ] - UPDATE: dies kann auch mit Node verwendet werden und mit npm bereitgestellt werden, siehe die Docs

Außerdem gibt es Nicht-Knoten Bibliotheken:

  • Datejs [ Dank an Peter Olson Nicht in npm oder GitHub verpackt, also nicht ganz so einfach mit Node zu verwenden - nicht wirklich empfohlen, da seit 2007 nicht mehr aktualisiert!

84voto

Onder OZCAN Punkte 1536

Es gibt eine Bibliothek für die Konvertierung:

npm install dateformat

Dann schreiben Sie Ihre Anforderung:

var dateFormat = require('dateformat');

Dann binden Sie den Wert:

var day=dateFormat(new Date(), "yyyy-mm-dd h:MM:ss");

siehe Datumsformat

52voto

HBP Punkte 14860

Ich habe nichts gegen Bibliotheken im Allgemeinen. In diesem Fall eine Allzweck-Bibliothek scheint overkill, es sei denn, andere Teile der Anwendung Prozess Daten schwer.

Das Schreiben kleiner Hilfsfunktionen wie dieser ist sowohl für Anfänger als auch für erfahrene Programmierer eine nützliche Übung und kann für die Neulinge unter uns eine Lernerfahrung sein.

function dateFormat (date, fstr, utc) {
  utc = utc ? 'getUTC' : 'get';
  return fstr.replace (/%[YmdHMS]/g, function (m) {
    switch (m) {
    case '%Y': return date[utc + 'FullYear'] (); // no leading zeros required
    case '%m': m = 1 + date[utc + 'Month'] (); break;
    case '%d': m = date[utc + 'Date'] (); break;
    case '%H': m = date[utc + 'Hours'] (); break;
    case '%M': m = date[utc + 'Minutes'] (); break;
    case '%S': m = date[utc + 'Seconds'] (); break;
    default: return m.slice (1); // unknown code, remove %
    }
    // add leading zero if required
    return ('0' + m).slice (-2);
  });
}

/* dateFormat (new Date (), "%Y-%m-%d %H:%M:%S", true) returns 
   "2012-05-18 05:37:21"  */

30voto

dreamLo Punkte 1118

Prüfen Sie den unten stehenden Code und den Link zu Datum Objekt , Intl.DateTimeFormat

// var ts_hms = new Date(UTC);
// ts_hms.format("%Y-%m-%d %H:%M:%S")

// exact format
console.log(new Date().toISOString().replace('T', ' ').substring(0, 19))

// other formats
console.log(new Date().toUTCString())
console.log(new Date().toLocaleString('en-US'))
console.log(new Date().toString())

// log format
const parts = new Date().toString().split(' ')
console.log([parts[1], parts[2], parts[4]].join(' '))

// intl
console.log(new Intl.DateTimeFormat('en-US', {dateStyle: 'long', timeStyle: 'long'}).format(new Date()))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X