このjavascriptが2008ではなく108を返すのはなぜですか?それは日と月を正しく取得しますが、年は取得しませんか?
myDate = new Date();
year = myDate.getYear();
年= 108?
year = myDate.getFullYear() % 100;
このjavascriptが2008ではなく108を返すのはなぜですか?それは日と月を正しく取得しますが、年は取得しませんか?
myDate = new Date();
year = myDate.getYear();
年= 108?
year = myDate.getFullYear() % 100;
回答:
これは2000年問題であり、1900年からの年数のみがカウントされます。
互換モードの潜在的な問題があり、getYear()
非推奨になりました-quirksmodegetFullYear()
から:
問題をさらに複雑にするために、date.getYear()は現在非推奨になっているため、古いブラウザーではサポートされていないdate.getFullYear()を使用する必要があります。しかし、それが機能する場合は、常に1年間、つまり 100ではなく2000。
あなたのブラウザはこれらの2つの方法で次の年を与えます:
* The year according to getYear(): 108
* The year according to getFullYear(): 2008
IEの実装は次のようにInternet ExplorerとFirefoxの間の実装の違いもありますgetYear()
ように振る舞うように変更されましたgetFullYear()
-からIBM:
ECMAScript仕様によれば、getYearは年から1900を引いた値を返します。本来は1998年の「98」を返すことを意味していました。getYearはECMAScriptバージョン3で廃止され、getFullYear()に置き換えられました。
Internet Explorerは、getYear()をgetFullYear()のように動作するように変更し、Y2k準拠にしましたが、Mozillaは標準の動作を維持しました。
getFullYearは古いブラウザでは機能しないため、次のようなものを使用できます。
Date.prototype.getRealYear = function()
{
if(this.getFullYear)
return this.getFullYear();
else
return this.getYear() + 1900;
};
JavaScriptプロトタイプは、C#拡張メソッドと同様に、既存のオブジェクトを拡張するために使用できます。これで、これを実行できます。
var myDate = new Date();
myDate.getRealYear();
// Outputs 2008
ドキュメントを確認してください。これは2000年問題ではありません-2000年問題の欠如です!この決定はもともとCで行われ、Perlにコピーされたようです。おそらくJavaScript、そしておそらく他のいくつかの言語にコピーされました。そのずっと前はまだ2桁の年を使用するのが望ましいと思われていましたが、そのインターフェイスを設計した人は誰でも、2000年以降に何が起こるかを考える必要があることを理解するのに十分な先見性があったので、最後の2年を提供するだけでなく数字は、1900年からの年数を提供します。急いでいる場合や危険を伴う場合は、2桁を使用できます。または、プログラムを引き続き機能させたい場合は、結果に100を加えて、本格的な4桁の年を使用できます。
Perlで初めて日付操作をしたときのことを覚えています。不思議なことに私はドキュメントを読みました。明らかにこれは一般的なことではありません。1、2年後、1999年12月31日にオフィスに電話をかけて、契約のPerlコードで可能な限り最後に発見されたバグを修正しました。それはまさにこの問題でした。標準の日付呼び出しは1900年から年を返し、プログラマーはそれを2桁の年として扱いました。(彼らは2000年に "00"を受け取ると想定していました。)若い経験の浅いプログラマーとして、私たちが "専門職"の仕事に多額のお金を払っていたこと、そしてそれらの人々は読むことさえも気にしていなかったことに私の心を吹き飛ばしました。ドキュメンテーション。それは長年の幻滅の始まりでした。今、私は年をとっていて、皮肉です。:)
2000年には、この頻繁に報告された非バグを称えて、年に1度のYAPC Perl会議が「YAPC 19100」と呼ばれました。
今日では、少なくともPerlの世界では、日付処理に標準モジュールを使用する方が理にかなっています。これは、実際の4桁の年を使用するものです。JavaScriptで何が利用できるかわからない。
この質問は古すぎるので、ドットコム時代には懐かしさで泣きます!
そうです、Date.getYear()は、Perlのlocaltime()と同じように、1900年からの年数を返します。1990年代に設計された言語では世紀の売上高が説明されないのはなぜでしょうか。あなたはそこにいなければなりませんでした。それは、(pets.comがしたように)当時は一種の理にかなっています。
2000年より前は、getYear()の結果に「19」を追加して「19100年のバグ」という結果になり、このバグを修正したくなるかもしれません。他の人はすでにこの質問に十分回答しています(getDate()の結果に1900を追加)。
JavaScriptについて読んでいる本は少し古いかもしれません。
過去からの爆風をありがとう!
指摘したようgetYear()
に、を使用しないでくださいgetFullYear()
。代わりにを使用してください。
物語は、IEの実装」のような単純なようではありませんしかしGetYear()
としてgetFullYear()
扱い、これらの日。オペラやIE getYear()
などgetYear()
、もともと2000年以前の日付のために指定されましたが、として扱いますgetFullYear()
が、2000年以降の日付の古い動作とのWebKitとFirefoxスティック
これにより、すべてのブラウザーで99が出力されます。
javascript:alert(new Date(917823600000).getYear());
これにより、FF / WebKitでは108、Opera / IEでは2008が出力されます。
javascript:alert(new Date().getYear());
ばかげている。これは2000年より前の日付で、現在はレガシーの理由から1900年からの年数を返します。実際の年を取得するには、getFullYear()を使用します。
あなたが得る数は1900年からの年数です。私に理由を尋ねないでください。
var date_object = new Date(); var year = date_object.getYear(); if(年<2000){年=年+ 1900; } // uは1年間取得します....