web-dev-qa-db-ja.com

Globalize.js-日付だけでなく日付と時刻を解析する方法

Globalize.js は、適用されている現在のカルチャに基づいて日付文字列を解析できます

var date = Globalize.parseDate("17/07/2013"); //Wed Jul 17 00:00:00 PDT 2013

私がやりたいのは、DateTimeを解析することです。 javascriptのDateオブジェクトがこれを処理しますが、Globalize.jsライブラリが処理しないことに驚いています。

var date = new Date("07/17/2013 11:55 pm"); //Wed Jul 17 23:55:00 PDT 2013
var date = Globalize.parseDate("07/17/2013 11:55 pm"); //null

私は何かが足りないのですか?私は自分で時間部分を解析することに傾いています。この種の機能を提供するGlobalize.jsを拡張する別のライブラリはありますか?周りを見回しましたが、あまり見つかりませんでした。

受け入れられた回答付きの更新

日付の形式がわかっている場合は、日付を解析できます。

    var date = Globalize.parseDate("17/07/2013 11:55 pm", "MM/dd/yyyy hh:mm tt"); 
    //date = null

私の例では、期間がa.mまたはp.m.の形式であると想定しているため、日付はnullになります。変更すると、日時を解析できるようになりました。

   var date = Globalize.parseDate("17/07/2013 11:55 p.m.", "MM/dd/yyyy hh:mm tt"); 
   //date = Wed Jul 17 23:55:00 PDT 2013

:これは非推奨グローバル化0.xにのみ適用されます。

注2:ハードコードされたパターンを渡すことは[〜#〜] not [〜#〜]i18nの推奨事項。

12
Kevin

使用しているパターンがわかっている場合:

var date = Globalize.parseDate("07/17/2013 11:55 pm", "MM/dd/yyyy hh:mm tt");

パターンがわからない場合:

var date = Globalize.parseDate("07/17/2013 11:55 pm", Globalize.culture().calendar.patterns.d + " " + Globalize.culture().calendar.patterns.t)

上記の行は、現在のカルチャを想定しています。他のカルチャで必要な場合、またはGlobalize.culture( "")を呼び出してローカルカルチャを確立していない場合は、culture()でカルチャを指定するだけです。

私は数分前にこのシナリオを実行しましたが、この解決策を見つけました。最新の解決策は厄介です。これを行うためのよりクリーンな方法があることを願っています。

:これは非推奨のGlobalize0.xにのみ適用されます。

注2:ハードコードされたパターンを渡すことは[〜#〜] not [〜#〜] i18nの推奨事項です。

12
Raciel R.

Globalize 1.xはCLDRに基づいており、現在は異なるAPIを備えています。新しいコードに従って、必要なことを実行します。

Globalize("en").parseDate("5/14/2015, 9:47 AM", {skeleton: "yMdhm"});
// > Thu May 14 2015 09:47:00 GMT-0300 (BRT)

詳細と例
CLDRのロード方法の詳細
CLDRパターンの使用方法に関する注意事項

3
Rafael Xavier

私はmoment.jsを調べます、それであなたはすることができます

d = moment("17/07/2013 11:55 pm" , "DD/MM/YYYY HH:mm a"); // parsed as 11:55pm local time
d = d.toDate(); //get it as a native js date object

タイムゾーンオフセットを指定しない限り、文字列を解析すると、現在のユーザーのタイムゾーンに日付が作成されます。

2
dave

受け入れられた回答は、すべての日時フィールドに完全な日付と時刻が必要であることを意味します。ただし、一部のフィールドに日付のみが含まれることは許容範囲を超えています。そこで、globalize.culture.en-AU.jsを変更して、カスタムパターンを追加しました。

Globalize.addCultureInfo( "en-AU", "default", {
    name: "en-AU",
    englishName: "English (Australia)",
    nativeName: "English (Australia)",
    numberFormat: {
        currency: {
            pattern: ["-$n","$n"]
        }
    },
    calendars: {
        standard: {
            firstDay: 1,
            patterns: {
                d: "d/MM/yyyy",
                D: "dddd, d MMMM yyyy",
                f: "dddd, d MMMM yyyy h:mm tt",
                F: "dddd, d MMMM yyyy h:mm:ss tt",
                M: "dd MMMM",
                Y: "MMMM yyyy",
                Z: "dd/MM/yyyy hh:mm:ss tt" // This is a custom one for our specifications.
            }
        }
    }
});

それを変更することによる最善の解決策ではありませんが、私や他のほとんどの目的のために、それらは Globalization.jsをバージョン0.xから1.xにアップグレードする すぐにはなりません。

この答えは、同じプロジェクトと同じページに、時間のある日付と日付フィールドだけを一緒に含めることができることを意味します。

1
Rhys Stephens