2017-10-10 7 views
2

私はangular.jsアプリケーションを持っていて、今週の月曜日と日曜日の日付を取得したいのですが、デフォルトでカレンダー日付に設定されます。私は7日以内に生産された日付に起因するエラーを見ていました。私は問題を修正した。Javascript new Date 2つの類似した関数呼び出しの異なる時値を生成する

しかし、コードで遊んでいたときに、同様の日付作成コードが1時間ごとに異なる値を生成していたことがわかりました。ここで

var current = new Date(); // get current date  
 
var weekstart = current.getDate() - current.getDay() + 1; 
 
var weekend = weekstart + 6; // end day is the first day + 6 
 
var firstday = new Date(current.setDate(weekstart)); 
 
firstday = new Date(firstday.getFullYear() + '-' + (firstday.getMonth() + 1) 
 
        + '-' + firstday.getDate()); 
 
console.log("Monday: " + firstday); 
 

 
//firstday.setHours(0, 0, 0, 0); 
 
var last = new Date(firstday); 
 
last.setDate(last.getDate() + 6); 
 
console.log("Sunday 1: " + last); 
 
var lastday = new Date(last.getFullYear() + '-' + (last.getMonth() + 1) 
 
         + '-' + last.getDate()); 
 
console.log("Sunday 2: " + lastday);
が私のコンソールで生成された値は次のとおりです:ここに私のコードの抜粋である

Monday: Mon Oct 09 2017 00:00:00 GMT+1100 (AUS Eastern Daylight Time) 
Sunday 1: Sun Oct 15 2017 00:00:00 GMT+1100 (AUS Eastern Daylight Time) 
Sunday 2: Sun Oct 15 2017 11:00:00 GMT+1100 (AUS Eastern Daylight Time)  

なぜ日曜日2で時間フィールドが11として生成なっているが、同じような新しいDateの月曜日のコールは00になりましたか?

+2

これが起こっているが、多分あなたは代わりに、あいまいさを避けるために、 '新しい日付(年、月、日)'コンストラクタを使用した理由はありませんアイデアの確認https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse。 – H77

答えて

3
new Date('2017-10-9') 
2017-10-08T16:00:00.000Z 
> new Date('2017-10-15') 
2017-10-15T00:00:00.000Z 
> new Date('2017-10-09') 
2017-10-09T00:00:00.000Z 

差がタイムゾーンを想定しています。

2017-10-09はUTCタイムゾーンを想定し、2017-10-9はローカルタイムゾーンを想定しています。 「3月7日、 2014」の日付文字列を考えると想定タイムゾーンの

違いは、(パース)のローカルタイムゾーンを想定しているが、そのような 、それは意志「2014年3月7日」として、ISO形式を与えられましたUTC(ES5およびECMAScript 2015)のタイムゾーンを想定します。

私の場合、タイムゾーンは+8なので、時間は8時間異なります。あなたのケースでは、それは+11です。

詳細

+1

あなたが引用しているテキストは、OPが使用していない日付文字列形式です。この質問のコードとの入力の違いは、日付の「9」と「09」です。なぜそれが出力の時間に影響しますか? – nnnnnn

+1

@nnnnnn Date.parse()は、異なるdateString形式に対して異なるタイムゾーンを想定しています。 –

+1

yup。それは **これは、変換されている文字列の形式に応じて、2つの異なる日付の文字列が同じ結果をもたらす可能性があることを意味します** – roshan

-1

読むthis

注:Dateコンストラクタと日付文字列の解析(メソッドとDate.parse、彼らは同じですが)強くにより、ブラウザの違いや矛盾に落胆しています。 RFC 2822形式の文字列のサポートは、慣例によるものです。 ISO 8601フォーマットのサポートは、日付のみの文字列(例: "1970-01-01")がローカルではなくUTCとして扱われる点で異なります。

+0

@ nnnnnn- ... ;-) – RobG

+1

参考資料は答えではありません。有用なコメントの考えです。 – RobG

関連する問題