611 Stimmen

Javascript fügt führende Nullen zum Datum hinzu

Ich habe dieses Skript erstellt, um das Datum für 10 Tage im Voraus im Format tt/mm/jjjj zu berechnen:

var MyDate = new Date();
var MyDateString = new Date();
MyDate.setDate(MyDate.getDate()+10);
MyDateString = MyDate.getDate() + '/' + (MyDate.getMonth()+1) + '/' + MyDate.getFullYear();

Ich muss das Datum mit führenden Nullen in der Tages- und Monatskomponente anzeigen lassen, indem ich diese Regeln zum Skript hinzufüge. Ich kann nicht scheinen, um es zum Funktionieren zu bringen.

if (MyDate.getMonth < 10)getMonth = '0' + getMonth;

y

if (MyDate.getDate <10)get.Date = '0' + getDate;

Wenn mir jemand zeigen könnte, wo ich diese in das Skript einfügen kann, wäre ich sehr dankbar.

1650voto

user113716 Punkte 309387

Versuchen Sie dies: http://jsfiddle.net/xA5B7/

var MyDate = new Date();
var MyDateString;

MyDate.setDate(MyDate.getDate() + 20);

MyDateString = ('0' + MyDate.getDate()).slice(-2) + '/'
             + ('0' + (MyDate.getMonth()+1)).slice(-2) + '/'
             + MyDate.getFullYear();

EDITAR:

Zur Erklärung, .slice(-2) gibt uns die zuletzt zwei Zeichen der Zeichenkette.

Wir können also auf jeden Fall hinzufügen "0" auf den Tag oder den Monat, und fragen Sie nur nach den letzten beiden, denn das sind immer die beiden, die wir wollen.

Wenn also die MyDate.getMonth() gibt zurück. 9 wird es sein:

("0" + "9") // Giving us "09"

also das Hinzufügen .slice(-2) ergibt die letzten beiden Zeichen, nämlich:

("0" + "9").slice(-2)
"09"

Aber wenn MyDate.getMonth() gibt zurück. 10 wird es sein:

("0" + "10") // Giving us "010"

also das Hinzufügen .slice(-2) gibt uns die letzten beiden Zeichen, oder:

("0" + "10").slice(-2)
"10"

280voto

Martin Braun Punkte 7789

Die moderne Art

Die neue moderne Art, dies zu tun, ist die Verwendung von toLocaleDateString denn es ermöglicht Ihnen nicht nur die Formatierung eines Datums mit korrekter Lokalisierung, sondern auch die Übergabe von Formatoptionen, um das gewünschte Ergebnis zu erzielen:

const date = new Date(2018, 2, 1)
const result = date.toLocaleDateString("en-GB", { // you can use undefined as first argument
  year: "numeric",
  month: "2-digit",
  day: "2-digit",
})
console.log(result) // outputs “01/03/2018”

Oder Sie verwenden ein temporales Objekt ( noch im Entwurf , caniuse ) :

const date = new Temporal.PlainDate(2018, 3, 1) // also works with zoned date
const result = date.toLocaleString("en-GB", { // you can use undefined as first argument
  year: "numeric",
  month: "2-digit",
  day: "2-digit",
})
console.log(result) // outputs “01/03/2018”

Wenn Sie undefined als erstes Argument angeben, wird stattdessen die Browsersprache erkannt. Alternativ können Sie auch 2-digit auch für die Jahresoption.

Leistung

Wenn Sie vorhaben, viele Daten zu formatieren, sollten Sie die Verwendung von Intl.DateTimeFormat stattdessen:

const formatter = new Intl.DateTimeFormat("en-GB", { // <- re-use me
  year: "numeric",
  month: "2-digit",
  day: "2-digit",
})
const date = new Date(2018, 2, 1) // can also be a Temporal object
const result = formatter.format(date)
console.log(result) // outputs “01/03/2018”

Der Formatierer ist mit Date- und Temporal-Objekten kompatibel.

Historische Daten

Anders als im Temporal-Konstruktor werden im Date-Konstruktor Jahre zwischen 0 und 99 als Jahre des 20. Jahrhunderts interpretiert. Um dies zu verhindern, initialisieren Sie das Datum wie folgt:

const date = new Date()
date.setFullYear(18, 2, 1) // the year is A.D. 18

Dies ist für Temporal-Objekte nicht erforderlich, aber Jahre unter 1000 enthalten in allen Fällen keine führenden Nullen, da der Formatierer (der für die Datums- und Temporal-API gemeinsam genutzt wird) keine Unterstützung für 4-digit Formatierung überhaupt nicht. In diesem Fall müssen Sie die Formatierung manuell vornehmen (siehe unten).

Für das Format ISO 8601

Wenn Sie Ihr Date in der YYYY-MM-DD Format (ISO 8601), sieht die Lösung anders aus:

const date = new Date(Date.UTC(2018, 2, 1))
const result = date.toISOString().split('T')[0]
console.log(result) // outputs “2018-03-01”

Ihr Eingabedatum sollte im UTC-Format sein oder toISOString() wird das für Sie in Ordnung bringen. Dies geschieht durch die Verwendung von Date.UTC wie oben dargestellt.

Historische Daten für das ISO 8601-Format

Anders als im Temporal-Konstruktor werden Jahre zwischen 0 und 99 im Date-Konstruktor als Jahre des 20. Jahrhunderts interpretiert. Um dies zu verhindern, initialisieren Sie das Datum so, dass es für das ISO 8601-Format verwendet wird:

const date = new Date()
date.setUTCFullYear(18, 2, 1) // the year is A.D. 18

Beachten Sie, dass das ISO-Format für zeitliche Objekte mit Daten vor dem Jahr 1000 oder nach dem Jahr 9999 ein unterschiedliche Formatierung im Vergleich zur alten Date-API. Es wird empfohlen, auf die benutzerdefinierte Formatierung zurückzugreifen, um unter allen Umständen vierstellige Jahreszahlen zu erzwingen.

Benutzerdefinierte 4-stellige Formatierung der Jahreszahl

Leider unterstützt das Formatierungsprogramm keine führenden Nullen in der Jahreszahl. Es gibt keine 4-digit Option. Dies gilt auch für temporale Objekte, da sie denselben Formatierer verwenden.

Glücklicherweise zeigt das ISO-Format der Datums-API immer mindestens 4 Ziffern für das Jahr an, obwohl temporale Objekte dies nicht tun. Zumindest für die Date-API können Sie also historische Daten vor dem Jahr 1000 mit führenden Nullen formatieren, indem Sie auf einen manuellen Formatierungsansatz zurückgreifen, der einen Teil der ISO 8601-Formatmethode verwendet:

const date = new Date()
date.setUTCFullYear(18, 2, 1)
const ymd = date.toISOString().split('T')[0].split('-')
const result = `${ymd[2]}/${ymd[1]}/${ymd[0]}`
console.log(result) // outputs “01/03/0018”

Für ein temporales Objekt ist ein anderer Weg notwendig, da die ISOYearString wird für Daten vor dem Jahr 1000 und nach dem Jahr 9999 unterschiedlich formatiert wie bereits erwähnt:

const date = new Temporal.PlainDate(2018, 3, 1) // also works with zoned date
const zeroPad = (n, digits) => n.toString().padStart(digits, '0');
const result = `${zeroPad(date.day, 2)}/${zeroPad(date.month, 2)}/${zeroPad(date.year, 4)}`;
console.log(result) // outputs “01/03/0018”

Sonstiges

Für die Date and Temporal API gibt es auch toLocaleTimeString mit dem Sie die Uhrzeit eines Datums lokalisieren und formatieren können.

126voto

Alex Ross Punkte 3649

Hier ist ein Beispiel aus der Datumsobjekt-Dokumente auf dem Mozilla Developer Network unter Verwendung einer benutzerdefinierten "Pad"-Funktion, ohne den Number-Prototyp von Javascript erweitern zu müssen. Die praktische Funktion, die sie als Beispiel anführen, ist

function pad(n){return n<10 ? '0'+n : n}

Und unten wird er im Zusammenhang verwendet.

/* use a function for the exact format desired... */
function ISODateString(d){
    function pad(n){return n<10 ? '0'+n : n}
    return d.getUTCFullYear()+'-'
    + pad(d.getUTCMonth()+1)+'-'
    + pad(d.getUTCDate())+'T'
    + pad(d.getUTCHours())+':'
    + pad(d.getUTCMinutes())+':'
    + pad(d.getUTCSeconds())+'Z'
}

var d = new Date();
console.log(ISODateString(d)); // prints something like 2009-09-28T19:03:12Z

76voto

Amin NAIRI Punkte 1862

Für euch Leute aus der Zukunft (ECMAScript 2017 und darüber hinaus)

解決方法

"use strict"

const today = new Date()

const year = today.getFullYear()

const month = `${today.getMonth() + 1}`.padStart(2, "0")

const day = `${today.getDate()}`.padStart(2, "0")

const stringDate = [day, month, year].join("/") // 13/12/2017

Erläuterung

その String.prototype.padStart(targetLength[, padString]) fügt so viele wie möglich hinzu padString im String.prototype Ziel, so dass die neue Länge des Ziels targetLength .

"use strict"

let month = "9"

month = month.padStart(2, "0") // "09"

let byte = "00000100"

byte = byte.padStart(8, "0") // "00000100"

57voto

joan16v Punkte 4845

Sie können eine "str_pad"-Funktion (wie in php) definieren:

function str_pad(n) {
    return String("00" + n).slice(-2);
}

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