2017-05-04 19 views
0

データテーブルの列に適切な形式の日付を表示しようとしています。Datatables/MomentJS - ロケールが変更されたときの日付形式の変更

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

期待どおりに動作します:

enter image description here

それがデータベースからyyyyMMdd(すなわち20051201)文字列として来るように私は、適切セルを検出し、フォーマットするMomentJSを使用していますさて、私はより柔軟なアプローチを実装するのに苦労し、現在のロケールでフォーマットを決定させます。私たちwebappには3つの言語があります。Datatableに現在の言語を検出させ、フォーマットをdd/MM/yyyyからMM/dd/yyyy、それが英語であれば)に変更します。

フォーマットとして'LLLL'を使用しようとしましたが、日付全体が文字で返されていますが、変更方法を理解できません。

+1

['format( 'L')'](http://momentjs.com/docs/#/displaying/format/)はニーズを満たしていますか? – VincenzoC

+0

@VincenzoC Vincenzoのおかげでありがとう。これは、書式設定を簡単にするため、部分的に行います。しかし、私は言語を変更するときに形式を変更していません。 – wickedchild

+0

コードに既にロケール情報がありますか、ブラウザロケールを取得する方法を尋ねています(この場合は[ここ](http://stackoverflow.com/q/1043339/4131048)を参照)。 – VincenzoC

答えて

1

モーメントlocale(String)を使用すると、ロケールを即座に設定したり、moment.locale(String)モーメントロケールをグローバルに設定することができます。

format()には、Lトークンを使用してください。

あなたのコードは、次のようになります:

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

moment-with-locales.js(または輸入に必要なロケール)を使用することを忘れないでください。

+0

こんにちはVincenzo。私はあなたのソリューションを使用しようとしましたが、たとえyyyyMMdd文字列がMM-dd-yyyyにフォーマットされていても、グローバルロケールを切り替えると変更されません。 – wickedchild

+1

@wickedchild問題はあなたがロケールを取得する方法である可能性があります。私の解決策のハードコーディングロケール( 'var locale = 'en-gb';')と['moment-with-locales.js'](https ://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.min.js)(または必要なロケールをインポートする)。 – VincenzoC

+0

それだけです!私は定期的なmoment.jsを使用していた、他の人に切り替えるトリック:)あなたの時間のために多くのありがとう、ヴィンチェンツォ:) – wickedchild

関連する問題