2016-12-15 3 views
1

日付セレクタの日付はDD/MM/YYYY h:mm Aの形式です。 現在、我々は次のようにこの日付が正しく解釈させるためにmoment.jsに明示的にフォーマットを提供する必要があります。明示的な書式ではなくロケールを使用してmoment.jsを使用して日付を書式設定

var dateFormats = ['DD/MM/YYYY h:mm A']; 
var tmp1 = moment(date, dateFormats).format('YYYY-MM-DD HH:mm'); 

次のように私たちの好みはdateformatsをハードコーディング避け、代わりにロケールを適用することができるようになります:

var locale = (window.navigator.userLanguage || window.navigator.language).toLowerCase(); 
moment.locale(locale); 
var tmp1 = moment(date).format('YYYY-MM-DD HH:mm'); 

現在、実行は、以下の(上記のロケールを適用した後):

moment('15/12/2016 2:27 PM').format('YYYY/MM/DD h:mm A'); 

を与える:

"2017/03/12 2:27 PM" 

それが与える必要があります:

"2016/12/15 2:27 PM" 

をどのように我々はこれを達成することができますか?

答えて

4

入力文字列にロケール固有の形式がある場合は、瞬間localeDataを使用して解析することができます。 longDateFormat(dateFormat);を使用すると、ローカライズされた形式を取得できます。ここで

エンauのロケールを使用した作業例:

moment.locale('en-au'); 
 
var input = '15/12/2016 2:27 PM'; 
 
var s = moment(input).format('YYYY/MM/DD h:mm A'); // Gives Deprecation warning 
 
console.log(s); // Invalid date 
 

 
// Get locale data 
 
var localeData = moment.localeData(); 
 
var format = localeData.longDateFormat('L') + ' ' + localeData.longDateFormat('LT'); 
 
s = moment(input, format).format('YYYY/MM/DD h:mm A'); 
 
console.log(s); // 2016/12/15 2:27 PM
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.0/moment-with-locales.min.js"></script>

関連する問題