2016-11-14 8 views
0

私はローカルのutcの日付文字列を取得するのにmoment.jsとmoment-timezoneを使用しています。私はこれを達成するために以下の関数を作成しました。アラビア語のロケールを扱うときにこれを使用しようとすると無効な日付が返されます。私は、次のパラメータ_getLocalUtcDateString("11/2/2016 4:45:47 PM", "America/New_York")でそれを呼び出し、それが無効な日付で失敗moment.locale('ar')を設定した場合アラビア語のロケールを扱うときにローカルのUTCの日付文字列を適切にフォーマットする

function _getLocalUtcDateString(utcDateString, timezoneId) { 
    var utcMoment = moment.utc(utcDateString, 'MM/DD/YYYY hh:mm:ss A').format('MM/DD/YYYY hh:mm:ss A'); 
    var localTimeTz = moment.utc(utcMoment).tz(timezoneId).format('MM/DD/YYYY hh:mm:ss A'); 
    return localTimeTz; 
} 

。問題は、utcMomentであると思われます.lacaleがアラビア語の場合、١١/٠٢/٢٠١٦ ٠٤:٤٥:٤٧ صとなり、moment.utc(utcMoment).tz(timezoneId).format('MM/DD/YYYY hh:mm:ss A');が失敗します。

+0

は、次の作業のスニペットに示すように、あなたは、単に、あなたの関数の最初の行に不要なformat()を削除することができ、問題を解決するにはアラビア語では米国の書式を使用していますか?これが米国のアラビア語読者の場合、ロケールは米国であり、言語はアラビア語です。 – RobG

答えて

1

コンソールを開くと、次の警告メッセージが表示されます。

廃止の警告を:提供された値が認識ISO形式ではありません。モーメントの作成は、すべてのブラウザとバージョンで信頼できないjs Date()に戻ります。 ISO以外の日付形式は推奨されず、今後のメジャーリリースで削除される予定です。詳細はhttp://momentjs.com/guides/#/warnings/js-date/を参照してください。

認識されたISO形式ではない文字列を解析しようとしているという問題があります(詳細はparsing docsを参照してください)。なぜあなたは、文字列の書式を設定している

function _getLocalUtcDateString(utcDateString, timezoneId) { 
 
    var utcMoment = moment.utc(utcDateString, 'MM/DD/YYYY hh:mm:ss A'); 
 
    var localTimeTz = moment.utc(utcMoment).tz(timezoneId).format('MM/DD/YYYY hh:mm:ss A'); 
 
    return localTimeTz; 
 
} 
 

 
moment.locale('ar'); 
 
var res = _getLocalUtcDateString("11/2/2016 4:45:47 PM", "America/New_York"); 
 
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.16.0/moment-with-locales.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.7/moment-timezone-with-data-2010-2020.min.js"></script>

関連する問題