2017-12-14 23 views
0

現在、異なる言語を処理し、PM/AM形式でミリ秒を表示すると奇妙な動作をするプロジェクトで作業しています。 24時間形式で同じ日付/時刻のに対しモーメントjsはAM/PMの後にミリ秒を表示します

12/14/2017 3:45:45 PM.199 

次のように示されている:私はAM/PM形式を使用して、ミリ秒の精度を持つ日付/時刻のペアを表示したい場合は

は、私はこのような何かを得ます:

12/14/2017 15:45:45.199 

は、このようなAM/PM形式を表示する方法はあります:

12/14/2017 3:45:45.199 PM 

T彼の目的は、ユーザーのローカリゼーションオプションに応じて日付/時刻を省略することです。そのため、私は "L LTS"フォーマットを使用しています。

Here is a fiddle to illustrate the problem

var divEn = $('#divEn'); 
var divFi = $('#divFi'); 
var en = "en"; 
var pt = "pt"; 
var dateEn = moment().locale(en); 
var dateFi = moment().locale(pt); 
format = "L LTS.SSS"; 
divEn.text(dateEn.format(format)); 
divFi.text(dateFi.format(format)); 

答えて

0

あなたは常にformatトークンの代わりに、L LTS.SSSとして12/14/2017 3:45:45.199 PM使用MM/DD/YYYY h:mm:ss.SSS Aような結果を表示します。月数の

MMスタンド、DDmmhは時間(0..12)で、YYYY年で、月の日である分、秒ssスタンド、小数第二およびためSSSスタンドの略AはAM/PMの略です。

Lおよびはローカライズされたトークンです(出力はロケールによって異なります)。

EDIT:

あなたはLTSトークンは、AM/PMトークン(Aまたはa)が含まれている場合、あなたは確認することができ、localeData()longDateFormat()は、ローカライズされた形式のトークンを取りに行く使用し、dinamically形式を変更することができます。ここで

ライブのサンプル:

function getCustomLocalizedFormat(locale){ 
 
    var localeData = moment.localeData(locale); 
 
    var lts = localeData.longDateFormat('LTS'); 
 
    var format = "L LTS.SSS"; 
 
    if(lts.match(/a/i)){ 
 
    format = "L h:mm:ss.SSS A"; 
 
    } 
 
    return format; 
 
} 
 

 
var divEn = $('#divEn'); 
 
var divFi = $('#divFi'); 
 
var divRes = $('#divRes'); 
 
var en = "en"; 
 
var pt = "pt"; 
 
var dateEn = moment().locale(en); 
 
var dateFi = moment().locale(pt); 
 

 
var enLocaleData = moment.localeData('en'); 
 
var formatEn = getCustomLocalizedFormat('en'); 
 
var formatPt = getCustomLocalizedFormat('pt'); 
 

 
divEn.text(dateEn.format(formatEn)); 
 
divFi.text(dateFi.format(formatPt)); 
 
divRes.text(moment().format('MM/DD/YYYY h:mm:ss.SSS A'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.4/moment-with-locales.min.js"></script> 
 

 
<p>English</p> 
 
<div id="divEn"></div> 
 
<p>Portuguese</p> 
 
<div id="divFi"></div> 
 
<p>General</p> 
 
<div id="divRes"></div>

ことに注意してください。

  • このアプローチはmomentjsによってサポートされている各ロケールのテストではありません。 pa-in(Punjabi)、ml(Malayalam)、ne(ネパール)、hi(ヒンディー語)、gom-latn(Konkani Latin script)などは、Aで始まるLTSトークンを持っています。これらのロケールで期待される出力が何であるかはわかりません。
  • updateLocale機能とlongDateFormatキーを使用してLong Date Formatsをカスタマイズできます。

はおそらく最善のアプローチは、サポートされるロケールのサブセットを定義し、各ロケール用のカスタム書式を定義することである(および/または一瞬のLTSカスタマイズされました)。

+0

お返事ありがとうございます。 問題をよりよく説明するために質問を編集しました。 「L LTS」を使用しているのは、ユーザーの言語設定に合わせて時間を表示したいからです。 –

+0

私は自分の答えを更新しました。それぞれのロケールに対応するソリューションを提供することは不可能だと思います。とにかく、あなたの期待される出力を定義することは重要です。 – VincenzoC

関連する問題