2014-11-21 30 views
0

我使用的是angularUI日期選擇在我的web應用程序時,我suddently碰到這個傳來:沒有過濾器的AngularUI Datepicker,發生了什麼?

http://plnkr.co/edit/MLnWCtYHMNqLeuFOetWH?p=preview

特別是我設置這樣在我的控制器日期:

$scope.getDate = function() { 
    $scope.dt = new Date(2015,0,1); 
}; 
$scope.getDate(); 

然後在我html的我顯示這兩種方法日期:

<pre>With angular date filter date is: <em>{{dt | date:'medium' }}</em></pre> 
<pre>Without angular date filter is: <em>{{dt}}</em></pre> 

正如你可以在這個plunker看到,我甲肝e選擇了日期「2015年1月1日」(2015年1月1日),如果我看到帶有Angular日期過濾器的活塞,我會得到正確的日期和時間。

但是,如果我刪除過濾器,我會在過去1小時內得到相同的日期。

這肯定是一個時區問題,但我找不到這種行爲的任何來源,所以我想了解發生了什麼。有任何解釋或網站瀏覽?

另外,什麼會到達服務器?我必須在服務器上做一些特殊的格式嗎? (我不能測試這個atm)

不知道這是否重要(我認爲是),但我的瀏覽器居住在意大利。

回答

2

這兩個顯示的日期是完全相同的時刻。他們只是格式不同。當您實例化日期時,瀏覽器會使用您當前的時區(2015年1月1日午夜在意大利,因此UTC + 1)。

當使用日期過濾器時,Angular在當前時區顯示日期,而不顯示UTC日期。

試試看:

var date = new Date(2015,0,1); 
date.toString(); // -> "Thu Jan 01 2015 00:00:00 GMT+0100 (CET)" 
date.toISOString(); // -> "2014-12-31T23:00:00.000Z" (Z means UTC time) 

作爲一個經驗法則,發送日期到服務器時總是使用ISO8601日期格式(這是序列化與日期值的對象時JSON.stringify做什麼)。