2013-07-17 64 views
12

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がありますか?私は周りを見回しましたが、あまり見つけられませんでした。

UPDATE日付が入っているフォーマットを知っている場合は、日付を解析することができます受け入れ答え

/ワット

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

私の例では、日付は、それので、nullになります期間はa.mまたはp.m.の形式になると予想しています。私がそれを変更すると、私はdatetimeを解析することができました。

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の推奨です。

+0

ハードコーディングされたパターンを渡すことは、i18n勧告ではありません。代わりにスケルトンを使用する必要があります(Globalize 1.x)http://stackoverflow.com/a/30237866/798133。 –

答えて

11

あなたが使用しているパターンがわかっている場合:あなたは、パターンがわからない場合

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()でカルチャを指定するだけです。

私はこのシナリオを数分前に実行しましたが、この解決策が見つかったばかりで、最新のものは乱雑です。これを行うにはよりクリーンな方法が必要です。

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

注2:ハードコードパターンを渡すは、NOT I18N推薦あります。

+0

私は時間を解析したいので、Globalize.parseDate( "11:55 pm"、Globalize.culture()。calendar.patterns.t)を使用しました。しかし、私は結果としてnullを得ました。何かアドバイス? –

+0

@MARKANDBhattはちょうど私がこのソリューションは 'globalize'バージョン0.xの上適用可能であると思いますが、ないライブラリ –

+1

を呼び出しますコンマではなく別の区切り記号を設定しますか? yMdHmは区切り記号としてコンマ(、)を強制しますが、スペースが必要です。 –

2

私はあなたが現在のユーザーのタイムゾーンの日付を作成する文字列を解析し、タイムゾーンのオフセットを指定しない限り、それをあなたが

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 

を行うことができ、moment.jsになります。

+2

date/time操作に関しては、moment.jsが非常に便利です。しかしシナリオでは、私はほとんどの時間を扱いますが、文化はユーザーまたはブラウザのどちらかによって定義されるため、手前の正しいパターンはわかりません。私は通常のようなもので終わる: 瞬間を(。。 "16/07/2012 12時45分"、瞬間()のlang()._ longDateFormat.L + "" +瞬間()のlang()._ longDateFormat.LT) .toDate() これは、以下の私の答えに似ています。もっと短い方法があるかどうか知っていますか? –

3

グローバル化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) 

More information and examples
More information on how to load CLDR
Notes on how to use CLDR patterns

+0

の1.xのバージョンのための方法でしょう、あなたの時間の文字列に有効な日付文字列を付加し、Globalize.parseDate – Jimit

+0

グローバル化、すなわち、リテラルを無視するか、任意のリテラルを受け入れるために、その点で寛大ではありません。 (カンマとスペースは、書式で定義されたリテラルです。解決策の1つは、CLDRデータをGlobalizeでフィードする前に修正することです。あるいは、https://github.com/rxaviers/react-date-inputのようなガイド付き入力を使用できますか? –

1

回答は、すべての日付フィールドに完全な日付と時刻が必要であることを意味します。しかし、いくつかのフィールドはちょうど日付を持つことが許容される以上のものです。そこで、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. 
      } 
     } 
    } 
}); 

それは、それを修正することにより、最善の解決策ではないですが、私や他の多くの目的のために、彼らはいつでもすぐにupgrading the Globalization.js from version 0.x to 1.xではありません。

この回答は、同じプロジェクトと同じページに、日付​​と時間フィールド、日付フィールドだけを持つことができるということを意味しています。

関連する問題