2016-04-26 29 views
2

これは初めての結果です。なぜ新しい日付今日は今日昨日返す

私はTelerikコントロールRadDatePickerを使用しており、クライアント側の日付を割り当てています。

事はコントロールではJavaScript

に、日付などの文字列が、Dateオブジェクトを受け入れないということですので、コントロールで日付を設定するには、私のコードは

var radDateControl = $find("radDateControl"); 
radDateControl.set_selectedDate(new Date('2016-04-26')); 

である。しかし、私は、新しい日付が昨日と同じ日付を返すことに気づいた!どうして?

午後5時58分東部時間(米国&カナダ)です。私はこの

alert(new Date('2016-04-26')); 

をすれば、私はこの

Mon Apr 25 2016 20:00:00 GMT-0400 (Eastern Daylight Time) 

を取得なぜ、どのように私は、今日のよう毎日取得することができます。私は最終的にそれがこれをしなかった何


更新

。それが他人を助けることができることを願って

var dateAsString = "2016-04-26"; 
var year = dateAsString.split('-')[0]; 
var month = dateAsString.split('-')[1]; 
var day = dateAsString.split('-')[2]; 
var date = new Date(Date.UTC(year, month - 1, day, 0,0,0)); 
date.setTime(date.getTime() + date.getTimezoneOffset() * 60 * 1000); 
rpdDateControl.set_selectedDate(date); 
+0

その日付は、真夜中のUTCの日付として解析されているため、なぜ東部時間のあなたのタイムゾーンで "昨日"あなたがUTCよりも4時間遅れている(DSTが指定されている)。 – ManoDestra

+0

var utcDate = new Date(Date.UTC(2016,4,26,0,0,0))のように、ローカル時刻の代わりに世界時を使用できます。 –

+0

まだタイムゾーンでDateオブジェクトを取得しています!これはChromeのコンソールからのものです:新しい日付(Date.UTC(2016,04,26,0,0,0)) 水曜日5月25日2016 20:00:00 GMT-0400(東部夏時間) –

答えて

2

新しく作成された日付オブジェクトは完全に正しいです。ここの間違った部分や少なくともあなたを混乱させる部分は、現在のタイムゾーンに日付オブジェクトを解析するブラウザです。

新しいDateオブジェクトを作成し、変数に保存した場合

...

var date = new Date('2016-04-26'); 

...あなたはあなたが求めてきたものでしょう。 2016年4月26日を表すDateオブジェクト(UTC)。

日付オブジェクトの値を取得するためにブラウザを使用しているため、値はローカルタイムゾーン(あなたのケースでは東部夏時間)で解析されます。したがって、新しい日付オブジェクトの作成に使用した正しい日付を処理したい場合は、.toUTCString()を使用します。

私は知っている、タイムゾーンを解析することは本当にイライラする可能性があります。さまざまなタイムゾーンを処理するには、MomentまたはMoment Timezoneをお試しください。私はあなたのニーズに合った瞬間が来ると思っていますが、完成のためだけです。

+0

好奇心が強いです。私はあなたがjsfiddleで私に言ったことをテストし、それはうまくいったが、私のアプリケーションではなかった。私はウィンドウのonloadイベントで同じことをやっているだけですが、私の可変日付はまだ昨日です!私が使用しているコントロールはDateオブジェクトと文字列ではないため、toUTCString()メソッドを使用することはできません。 –

+0

ブラウザの開発者コンソールでこのフィドルでコードを実行できますか?もちろん、出力は面白いでしょう。 https://jsfiddle.net/os9raq9h/ – Aer0

+0

はい、「火曜日、2014年4月26日00:00:00 GMT」です。私はtoUTCStringを使用しない場合でも、それは動作します。しかし、私のアプリではそうではありません。 VS2012、Embeeded IIS(ASP.NET開発サーバー)、Chromeを使用しています。 –

0

代わりにDate.now()を使用してください。なぜ文字列が機能していないのか分かりませんが、これはとにかく動作します。

+0

@Are0は実際には正しいですが、どちらの方法でも動作します。 – Cameron637

0

あなたは日付を尋ねていますが、タイムゾーンを変更すると2時間後に戻ってくるのですが、alert(new Date());だけでなく、現在の日付を教えてください。また、sshとタイプ日付を使用してサーバーに移動しますあなたの日付ではなく、tzselectを使ってサーバーをあなたの日付に変更することができます

関連する問題