2017-12-09 3 views
2

moment.js(ロケール付き)で日付をスペイン語から英語に翻訳すると、「無効な日付」エラーが発生します。ここの奇妙なことは、いくつかの日付でしか失敗しないということです。ロケールでmoment.jsの日付を解析します

私は日付のリストを持っています(同じライブラリを使用する前に解析されたもの)。私はそれを解析されたときにもう一度後の私が取得(希望の言語に私の日付を変換するために)moment.jsロケールを変更するには、この:

Enero 13º 2017, 6:00:02 Am --> Invalid date 
Abril 17º 2017, 7:36:03 Pm --> Invalid date 
Abril 17º 2017, 6:00:01 Am --> Invalid date 
Mayo 12º 2017, 2:04:19 Pm --> May 12th 2017, 2:04:19 Pm 
Abril 17º 2017, 11:47:17 Pm --> Invalid date 

解析メソッド(形式は他の瞬間に、それは他の値を取得することができますので、ここでは初期化されます):

format = 'MMMM Do YYYY, h:mm:ss a'; 
$(".videoDate").each(function(){ 
    var _text = $(this).text();//Extract initial date 
    var _date = moment(_text, format).format('MMMM Do YYYY, h:mm:ss a');//format 
    $(this).text(_date);//new date setting 
}); 

http://jsfiddle.net/gr1zdtag/

たぶん私は何かをしないのですが、私はまだその理由を見つけることができません。この問題を手伝ってくれますか?

+1

私はいくつかの月が間違って解析されるようなjsfiddleの外観を提供しました。一見したところで、なぜhttps://github.com/moment/moment/blob/develop/locale/es.jsがうまく見えるのか分かりません。 –

答えて

3

英語以外の入力を解析するときにロケールを指定できます。ロケールキーがmoment()moment.utc()の三番目の引数として渡すことができ、バージョン2.0.0 のとおり

:あなたはmoment(String, String, String)を使用することができます。 (moment.locale()変更はグローバルロケールながら)あなたが与えられた瞬間オブジェクトのロケールを変更するlocale()機能を使用することができます

。ここで働いてサンプル

var format = 'MMMM Do YYYY, h:mm:ss a'; 
 
$(".videoDate").each(function(){ 
 
    var _text = $(this).text();//Extract initial date 
 
    //Parse in spanish and convert it in english 
 
    var _date = moment(_text, format, 'es') 
 
        .locale('en') 
 
        .format('MMMM Do YYYY, h:mm:ss a');//format 
 
    $(this).text(_date);//new date setting 
 
});
<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.3/moment-with-locales.min.js"></script> 
 

 
<ul> 
 
    <li class="videoDate">Enero 13º 2017, 6:00:02 Am</li> 
 
    <li class="videoDate">Abril 17º 2017, 7:36:03 Pm</li> 
 
    <li class="videoDate">Abril 17º 2017, 6:00:01 Am</li> 
 
    <li class="videoDate">Mayo 12º 2017, 2:04:19 Pm</li> 
 
    <li class="videoDate">Abril 17º 2017, 11:47:1</li> 
 
</ul>


Mayo 12º 2017, 2:04:19 Pmがデフォルトの瞬間でbeacuseを認識されているが、英語ロケールを使用して文字列を解析し、モーメントのパーサは非常に寛容です。 MayoにはMayが含まれているため、有効な月名(forgiving modeを使用)とみなされます。

+0

ええ、それは3番目のパラメータで動作しています。とにかく、JS関数を呼び出すと、呼び出し元関数は前に "moment.locale(" en ")を作成します。これは同じ方法で動作するはずですが、瞬時のロケールが書式関数で使用されていないように見えます。ヘルプ@VincenzoC – Genaut

+0

@Genaut日付を英語で表示したいですか?(スペイン語の日付を英語に翻訳したいのですが) – VincenzoC

+0

はい、今は3番目のパラメータで作業しています – Genaut