2017-05-04 1 views
0

Ich versuche, ein korrekt formatiertes Datum in einer Datatable-Spalte anzuzeigen. Ich verwende MomentJS, um die Zelle richtig zu erkennen und zu formatieren, da es als yyyyMMdd (dh 20051201) Zeichenfolge aus der Datenbank kommt:Datatables/MomentJS - Ändern des Datumsformats bei Gebietsänderungen

columns: [ 
    { 
     data: "fechaPago", 
     "render": function(data){ 
      return (moment(data).isValid()) ? moment(data).format("DD/MM/YYYY") : "-"; 
     } 
    }, 
] 

Welche wie erwartet funktioniert genau:

enter image description here

Jetzt habe ich Schwierigkeiten, einen flexibleren Ansatz zu implementieren, und das aktuelle Gebietsschema bestimmt das Format. Wir haben 3 verfügbare Sprachen in unserer Webapp und Ich möchte, dass das Datatable die aktuelle Sprache erkennt und das Format (von dd/MM/yyyy zu MM/dd/yyyy, wenn es in Englisch ist) ändert.

Ich habe versucht, 'LLLL' als das Format zu verwenden, aber es gibt das ganze Datum mit Buchstaben zurück, und ich kann nicht herausfinden, wie man es ändert.

+1

Kann ['format ('L')'] (http://momentjs.com/docs/#/displaying/format/) Ihre Anforderungen erfüllen? – VincenzoC

+0

@VincenzoC Danke für die Hilfe Vincenzo. Es tut es teilweise, da es die Formatierung sehr vereinfacht. Es ändert jedoch nicht das Format, wenn ich die Sprache ändere. – wickedchild

+0

Haben Sie bereits Gebietsschema-Informationen in Ihrem Code oder fragen Sie nach, wie Sie das Gebietsschema des Browsers ermitteln können (in diesem Fall suchen Sie unter SO, zum Beispiel [hier] (http://stackoverflow.com/q/1043339/4131048))? – VincenzoC

Antwort

1

Sie können die Moment locale(String) Funktion verwenden, um das Gebietsschema für einen Momentoblect festzulegen, oder moment.locale(String), um das Momentgebietsschema global festzulegen.

Um lokalisierte Tag, Monat und Jahr verwenden L Token in der format().

Ihr Code wird wie folgt sein:

columns: [ 
    { 
    data: "fechaPago", 
    "render": function(data){ 
     var locale = // get current locale code 
     return (moment(data).isValid()) ? moment(data).locale(locale).format("L") : "-"; 
    } 
    }, 
] 

Denken Sie daran, moment-with-locales.js (oder Import erforderlich Positionen) zu verwenden.

+0

Hallo nochmal Vincenzo. Ich habe versucht, Ihre Lösung zu verwenden, und obwohl yyyyMMdd Zeichenfolge zu MM-TT-JJJJ formatiert wird, ändert es nicht, wenn ich das globale Gebietsschema wechseln, nicht einmal wenn ich neu lade. – wickedchild

+1

@wickedchild das Problem könnte die Art sein, wie Sie Gebietsschema erhalten, versuchen Sie, meine Lösung Hardcoding-Gebietsschema zu testen ('var locale = 'en-gb';') und rember verwenden ['moment-with-locales.js'] (https : //cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.min.js) (oder importieren Sie die erforderlichen Gebietsschemas). – VincenzoC

+0

Das war's! Ich benutzte den normalen moment.js, wechselte zu dem anderen, machte den Trick :) Vielen Dank für Ihre Zeit, Vincenzo :) – wickedchild

Verwandte Themen