2016-04-26 172 views
2

這是我第一次得到這個結果。爲什麼新的日期設置爲今天返回昨天

我正在使用Telerik控件RadDatePicker,我正在分配日期客戶端。

的事情是,控制不接受一個字符串作爲日期,但日期對象的JavaScript

所以,我的代碼來設置日期在控制

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

但是,我意識到新的Date會像昨天一樣返回日期!爲什麼?

現在是東部時間下午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)) Wed 2016年5月25日20:00:00 GMT-0400(東部夏令時) –

回答

2

新創建的日期對象是完全正確的。這裏的錯誤部分或者至少是讓你困惑的部分是你的瀏覽器,將日期對象解析到當前時區。

如果您創建一個新的Date對象,並將其保存到一個變量...

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

...你會得到你問過什麼。代表2016年4月26日的日期對象(在UTC中)。

由於您使用瀏覽器獲取日期對象值,因此該值僅通過當地時區進行分析(在您的案例中爲Eastern Daylight Time)。因此,如果您想處理用於創建新日期對象的正確日期,則可以使用.toUTCString()

我知道,解析時區可能會非常令人沮喪。爲了處理不同的時區,你可以嘗試MomentMoment Timezone。我想時刻應該適合你的需求,但只是爲了完成。

+0

這很好奇。我測試了你在jsfiddle中告訴我的情況,它工作了,但不是在我的應用程序中。我只是在窗口的onload事件中做同樣的事情,但我的變量日期仍然是昨天!我不能使用toUTCString()方法,因爲我使用的控件只接受Date對象而不是字符串。 –

+0

你能在瀏覽器開發者控制檯上運行這個小提琴中的代碼嗎?當然,輸出會很有趣。 https://jsfiddle.net/os9raq9h/ – Aer0

+0

是的,它是「2016年4月26日星期二00:00:00 GMT」。即使我不使用toUTCString它的作品。但在我的應用程序中並沒有。我正在使用VS2012,嵌入式IIS(ASP.NET Development Server)和Chrome。 –

0

只需使用Date.now()代替。我不知道爲什麼字符串不能正常工作,但是無論如何這都會起作用。

+0

@ Aer0實際上是對的,但無論哪種方式都行。 – Cameron637

0

你問的是日期26,但帶時區更改會給你回2個小時,爲什麼不只是alert(new Date());並讓它給你它的當前日期呢,還要檢查它是否使用ssh和類型date來檢查服務器,if它不是你的日期你可以使用tzselect修改服務器到你的日期

相關問題