1

ここに示すテキストベースの日付を比較する戦略を使用する場合: 2 つの日付を JavaScript で比較します

ユーザーが「03/02/2013」(「/」を含む形式が尊重される)と入力し、それを「04/01/2013」と比較するとします。ヨーロッパのカレンダーでは、最初の日付は 2 月 3 日で、2 番目の日付は 1 月 1 日です。しかし、米国のカレンダーでは、1 つ目は 3 月 2 日で、2 つ目は 4 月 1 日です。ヨーロッパの標準では、最初の日付は 2 番目の日付よりも大きくなりますが、米国の標準では、2 番目の日付が大きくなります。

日付の場所のリンクアカウントからのこの方法はありますか? 私のコンピューターがヨーロッパ版を使わずにこれをテストする方法を見つけられなかったので、質問します。

4

2 に答える 2

1

指定されたリンクの convert-method は、constructor-type をチェックします。convert-method にデータを文字列として渡す場合、RFC 2822 準拠のタイムスタンプである必要がある標準日付コンストラクターを使用して Date-Object をインスタンス化します。

もちろん、「03/02/2013」は有効で準拠したタイムスタンプです。常に 3 月 2 日に返されます。ヨーロッパのフォーマットが意図されているかどうかをどのように認識しますか???

「toLocaleDateString」メソッドを使用して比較を行うコードを書くことができます。アプリが現在ヨーロッパのマシンで表示されているかどうかがわかります。あなたの例では:

new Date("03/02/2013").toLocaleDateString()

ヨーロッパでは「2.3.2013」を返します

基本的なチェック(ドットが存在する場合のみ、そのように行うことができます):

new Date("03/02/2013").toLocaleDateString().split('.').length === 3

これが true を返す場合、おそらくヨーロッパのマシンを使用しています。

于 2013-01-22T13:16:29.143 に答える
1

いいえ、そこの戦略は日付のローカリゼーションを処理しません。

Javascripts 内部の Date オブジェクトは、ローカリゼーションを考慮に入れています。しかし、それはブラウザ/マシンのロケール設定に依存するだけで、必ずしもユーザーの日付形式と一致する必要はありません。

また、DD/MM/YYYY と MM/DD/YYYY 形式を区別することはできません。例外: DD > 12 ユーザーに関する追加情報なし。

もちろん、ブラウザ/マシンまたは IP アドレスからのローカリゼーションを使用して場所などを取得し、この情報に応じてフォーマットを処理することもできますが、これは簡単に間違った結果につながる可能性があります。

Dateオブジェクトが正しく構築されていることを確認したいと思います。

たとえば、ユーザーが年月と日をそれぞれ選択できるようにする日付ピッカーを提供して、形式による日付のあいまいさを回避します。

PC の前に座っているユーザーがどのフォーマットを使用しているかを確認できないためです。

例: 私はヨーロッパ人で、ブラウザのロケール設定を enUS に設定しています。

したがって、

new Date(YEAR,MONTH,Day) 次に、たとえば-> のようにDateオブジェクトを構築できます

var year1 = 2013; //Suppose those variables will be handle by some user input method
var year2 = 2013;

var month1 = 0; //January (Months are zero based in javascripts Date Object)
var month2 = 3; //April

var day1 = 3;
var day2 = 1


var date1 = new Date(year1,month1,day1);
var date2 = new Date(year2,month2,day2);

console.log(date2.getTime() > date1.getTime()); //true

そして、その問題をまったく回避します

于 2013-01-22T13:11:48.147 に答える