2013-05-14 7 views
6

日付の書式を設定するためのjavascriptコードを書きたいと思っていますが、Firefox上で動作させるのに問題があります。Javascript JavaScriptからFirefoxに異なる出力を与える文字列の日付

私が入力したフォームは05/01/13(mm/dd/yy)で、2013-05-01(yyyy/mm/dd)が必要です。そのために

、私がやったことは、このようなものです:

var formDate = document.getElementById("start").value; 
var myDate = new Date(formDate); 
var startDate = new Date(); 

startDate.setMonth(myDate.getMonth() + 1); 
startDate.setFullYear(myDate.getFullYear()); 
var FormattedDate = startDate.getFullYear() + "-" + ((startDate.getMonth() <= 10) ? "0" : "") + startDate.getMonth() + "-01"; // the day is always 01 

alert(FormattedDate); 

あなたがここに両方の​​ブラウザでそれを試すことができます:GoogleのChromeでhttp://jsfiddle.net/j4BLH/

を、このコードは、月のための一例2013-05-01を掲載していますFirefoxでは、私は1913-05-01を持っています。

私は"20" + startDate.getYear()のようなものを書いている可能性があることは知っていますが、なぜ結果がChromeからFirefoxに異なるのか不思議でしたか?もし私がここに貼り付けたコードを書く良い方法があれば、私に教えてください:)

ありがとう! specから

+0

このスレッドをチェックする: http://stackoverflow.com/questions/8681534/why-does-javascript-evaluate-a-2-digit-year-of-00-as-1900-instead-of-2000 – MasNotsram

+1

日付が1970年代からミリ秒単位で保存されているため、firefoxのようなものは変わったようです。だから、1913年を返すべきではない。[(ECMAScriptリファレンス)](http://objjob.phrogz.net/js/object/224) –

+0

@SpAmはリンクに感謝しているが、Chrome&Firefoxこれに対して異なる行動をとる。 –

答えて

5

ただし、式Date.parse(x.toLocaleStringは())は、一般に先行する3つの式 と、同じ数値を生成するために を必要としません、 がDate Time String Format(15.9.1.15)に準拠しておらず、その実装でtoStringまたはtoUTCString メソッドによって を生成できなかった場合、Date.parseによって生成される値は 実装依存です。

日付文字列をコンストラクタに渡して日付オブジェクトを作成する場合、解析する方法はDate.parseとまったく同じです。

日付の形式は、2桁の年を使用していますが、規格に準拠していません。そのため、これらの日付の解析方法は実装固有のもので、使用されているJavascriptエンジンに依存しているようです。 Googleの場合、それは通常V8で、FirefoxではTraceMonkeyまたはRhinoです。

つまり、実際にはJS標準にYYがないため、4桁の年を使用する必要があります。

+1

この回答ありがとうございます。 –

関連する問題