0

異なるカルチャで日付を処理する方法、つまり、共通の JavaScript コードを使用してすべてのカルチャの日付を処理するにはどうすればよいですか。例えば ​​-

Globalize.culture( "en" );
Globalize.parseDate( "1/2/2003" ); // Thu Jan 02 2003
Globalize.culture( "fr" );
Globalize.parseDate( "1/2/2003" ); // Sat Feb 01 2003

上記のコードでは、異なるカルチャの日付形式を変更する代わりに、汎用コードを作成する方法を教えてください。

前もって感謝します

4

3 に答える 3

1

それはいけません。すべての文化に共通する日付表記はありません。2003 年 1 月 2 日の例は特にわかりやすい例です。それを作成した人物が使用していた文化的慣習に関する信頼できる情報がなければ、それが何を意味するのかを知ることはできません。実際、en-US (米国英語) と en-GB (英国英語) を区別する必要があります。

Globalize.js ライブラリは、このバリエーションを削除するためではなく、対処することを目的としています。

It is possible to allow different date notations e.g. as follows (code excerpt from my book [Going Global with JavaScript and Globalize.js][1]):
function read(dateInput) { 
  var languages = ['en', 'fi', 'sv', 'ru']; 
  var formats = ['d', 'D']; 
  var date; 
  for(var langNr in languages) { 
    for(var fmtNr in formats) { 
      date = Globalize.parseDate(dateInput,formats[fmtNr],languages[langNr]); 
      if(date != null) { 
        return date; 
      } 
    } 
  } 
  return null; 
}

これにより、(米国) 英語、フィンランド語、スウェーデン語、およびロシア語で使用される短い日付表記と長い日付表記が可能になるため、ユーザーがこれらの言語のいずれかを使用することが期待される状況にかなり自由で適しています。

しかし、追加するロケールが増えるほど、あいまいさが生じます。1/2/2003 のような表記がさまざまなロケールで許可されているが、それらに複数の意味がある場合、ループ構造は適用される意味を定義します。これは、入力がユーザーの意図とは異なる意味で取られることを意味する可能性があります。このため、すべて数値の日付表記は避けたほうがよい場合があります。月の名前を必要とする形式は、はるかに安全です。

2003-02-01 のような形式は原則として明確ですが、原則としてのみであり、ほとんどの人にとって不自然に見えます。ただし、Globalize.js ではそのような形式を読み取ることができます。形式を明示的に指定するだけです。

于 2012-09-14T11:49:35.237 に答える
0

正直なところ、あなたの質問はあまり明確ではありません。コンテキストから、ユーザーがネイティブ形式で日付を入力できるようにし、Globalize を使用して形式がどうなるかを自動的に「検出」し、適切な解析方法を適用できるようにしたいと考えています。

それがあなたの求めているものなら、それはできません。さまざまな国の書式設定の違いについては既にご存じでしょう。さらに悪いことに、長い形式または短い形式が使用される可能性があります (残念ながら、Globalize は、DateTime の を呼び出して .Net で使用できる既定の形式の概念をサポートしていませんToString("g"))。つまり、「2012-10-31」、「31.10.12」、「31 października 2012」など、すべて (多かれ少なかれ) 有効なポーランドの日付形式がある可能性があります。

自由形式の入力を許可するのは得策ではないことを理解していただければ幸いです。代わりに何をすべきか?答えは、jQuery UI の Datepickerを使用することです。有効な地域スクリプトを追加するだけで、かなり簡単にローカライズできます。

$( "#datepicker" ).datepicker( $.datepicker.regional[ "fr" ] );

次に、JavaScript の Date オブジェクトを取得するには、Datepicker のgetDate()メソッドを呼び出します。

var currentDate = $( ".selector" ).datepicker( "getDate" );

それでおしまい。ところで。Datepicker を使用すると、エンド ユーザーが入力した日付を変換できます (テキスト フィールドに添付する場合)。もちろん、地方のスクリプトで指定された形式になります...

于 2012-10-31T19:14:38.703 に答える
0

あなたは国際化を意味します。2012 年 2 月 1 日の 2012-02-01 などの明確な形式を指定する、ISO8601 などの標準があります。

日付形式は「文化」ではなく、国籍に関係しているとは思いません。世界の英語話者の大部分は、日/月/年の形式を使用しています。これは、彼らが従ったり支持したりする文化ではなく、住んでいる国に関連しています.

01-Feb-2012 や 2012 年 2 月 1 日のように、常に数字ではなく月名を使用するなど、他にも明確な形式があります。グレゴリオ暦以外のカレンダーでも同じことが機能します。

于 2012-09-14T11:09:13.887 に答える