2016-08-18 2 views
1

Gibt es eine Möglichkeit, einen benutzerdefinierten Formatcode für lange Daten basierend auf dem Gebietsschema hinzuzufügen?benutzerdefiniertes langes Datumsformat in Moment js

zum Beispiel:

moment().format("L")

ist ein bestehendes Format, das das lange Datum für das Gebietsschema gedruckt werden (einschließlich dem Jahr), aber wenn ich will meine eigenen hinzufügen, die das Jahr wie folgt ausgeschlossen:

moment().format("LTY"), die nur den Monat und den Tag in einem bestimmten Gebietsschema gedruckt.

Wie kann ich das tun?

Antwort

2

Lesen Sie den Abschnitt long date formats. Sie würden mit dem Standard lange Datumsformat Objekt ersetzen:

moment.updateLocale('en', { 
        longDateFormat : { 
        LT: "h:mm A", 
        LTS: "h:mm:ss A", 
        L: "MM/DD",   // Remove year 
        LL: "MMMM Do YYYY", 
        LLL: "MMMM Do YYYY LT", 
        LLLL: "dddd, MMMM Do YYYY LT" 
       } 
}); 

Dann nutzen:

var x = moment().format('L'); 

Moment analysiert die Zeichenfolge Format für Token suchen geben. Wenn Sie eine benutzerdefinierte Token wie „LTY“ hinzufügen möchten, müssen Sie es auch auf der Liste der lokalen Formatierungen Token hinzufügen müssen:

var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; 

würde sich ändern (LTY hinzugefügt):

var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTY|LTS|LT|LL?L?L?|l{1,4})/g; 

und aktualisieren Sie die Standard lange Datumsformate mit dem neuen Token:

var defaultLongDateFormat = { 
    LTY : 'MM/DD HH:mm', // format for new token 
    LTS : 'h:mm:ss A', 
    LT : 'h:mm A', 
    L : 'MM/DD/YYYY', 
    LL : 'MMMM D, YYYY', 
    LLL : 'MMMM D, YYYY h:mm A', 
    LLLL : 'dddd, MMMM D, YYYY h:mm A' 
}; 

dann, wenn Sie ein anderes Format gesucht:

moment.updateLocale('en', { 
        longDateFormat : { 
        LTY: 'MM/DD HH:mm', // new format for token here 
        LT: "h:mm A", 
        LTS: "h:mm:ss A", 
        L: "MM/DD/YYYY", 
        LL: "MMMM Do YYYY", 
        LLL: "MMMM Do YYYY LT", 
        LLLL: "dddd, MMMM Do YYYY LT" 
       } 
}); 

und schließlich:

var x = moment().format('LTY'); 

aber man müsste prüfen, was das für einen anderen Code tun wird. Außerdem müssten Sie bei jeder Aktualisierung der Quelle moment.js dieselben Änderungen vornehmen, einen CDN nicht verwenden und Ihr Code wäre nicht mit der Standardbibliothek moment.js auf andere Sites portierbar.

So bleiben Sie auf die updateLocale Art der Dinge zu tun. Oder einfach tun:

var LTY = 'MM/DD HH:mm'; 
 
var d = new moment().format(LTY); 
 
console.log(d)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.js"></script>

und du bist fertig.

Beachten Sie, dass die Verwendung von "locale" hier eine falsche Bezeichnung ist. Formatierungseinstellungen haben nichts damit zu tun, wo sich der Benutzer befindet (d. H. Sein Gebietsschema), und "en" ist eine Sprache, die in einer großen Anzahl von Gebietsschemas gesprochen wird, die sehr unterschiedliche Präferenzen für die Formatierung eines Datums haben.

+0

wo setzen Sie die localFormattingTokens? – Ben

+0

@ Ben-Sie müssen den Quellcode bearbeiten (localFormattingTokens sind in Zeile 559 in Version 2.14.1). Ich habe oben gezeigt, wie es geht, aber empfehle es aus den angegebenen Gründen nicht. – RobG