2013-10-31 84 views
1

以我的角應用我打電話一個WCF REST服務,它返回一個數組OB的物體,其中所述屬性中的一個是DateTime類型,它獲取在JSON以這樣的形式應用日期過濾器多次

序列化的

[{"date":"\/Date(1295164800000-0800)\/",...

很好地顯示在我的模板中我創建了一個過濾器來將該JSON表示轉換爲JavaScript Date對象。

eventsApp.filter("fromMSDate", function(){ 
    return function (jsonDate) { 
     var D, dtime, T, tz, off, 
      dobj = jsonDate.match(/(\d+)|([+-])|(\d{4})/g); 
     T = parseInt(dobj[0]); 
     tz = dobj[1]; 
     off = dobj[2]; 
     if (off) { 
      off = (parseInt(off.substring(0, 2), 10) * 3600000) + 
       (parseInt(off.substring(2), 10) * 60000); 
      if (tz == '-') off *= -1; 
     } 
     else off = 0; 
     return new Date(T + off).toUTCString(); 
    } 
}); 

我用這種方式

  <span class="span1">Date:</span> 
      <span>{{event.date | fromMSDate}}</span> 

所有作品需要,我有在頁所示的JS Date對象,但我不喜歡的格式,所以我嘗試應用'date'過濾器,但它沒有成功。

  <span class="span1">Date:</span> 
      <span>{{event.date | fromMSDate | date:'medium'}}</span> 

date濾波器被忽略由於某種原因和日期被示出爲Fri, 15 Mar 2013 00:00:00 GMT

我在這裏做錯了什麼?

THX

回答

2

Date.prototype.toUTCString回報的格式迄今未通過角的日期過濾認可(「星期一,2006年7月3日21時44分38秒格林尼治標準時間」)。

From date filter docs

[參數date:]日期格式化或者作爲日期對象,毫秒 (字符串或數字)或各種ISO 8601時間字符串格式(例如 YYYY-MM-DDTHH:MM: ss.SSSZ及其較短版本,如 yyyy-MM-ddTHH:mmZ,yyyy-MM-dd或yyyyMMddTHHmmssZ)。如果沒有在字符串輸入中指定的時區爲 ,則認爲時間位於本地時區的 。

所以,以產生日期過濾器可以理解使用Date.prototype.toISOString產生日期濾波器兼容格式日期的格式(「2013-10-31T08:36:14.601Z」)。

app.controller('AppCtrl', function($scope){ 
    $scope.jsonDate = "\/Date(1295164800000-0800)\/"; 
}); 

app.filter("fromMSDate", function(){ 
return function (jsonDate) { 
    var D, dtime, T, tz, off, 
    dobj = jsonDate.match(/(\d+)|([+-])|(\d{4})/g); 
    T = parseInt(dobj[0]); 
    tz = dobj[1]; 
    off = dobj[2]; 
    if (off) { 
    off = (parseInt(off.substring(0, 2), 10) * 3600000) + 
      (parseInt(off.substring(2), 10) * 60000); 
    if (tz == '-') off *= -1; 
    } 
    else off = 0; 
    return new Date(T + off).toISOString(); 
} 
}); 
<div ng-controller="AppCtrl"> 

    <div>date json: {{jsonDate}}</div> <!-- == /Date(1295164800000-0800)/ --> 
    <div>date fromMSDate: {{jsonDate | fromMSDate}}</div> <!-- == 2011-01-16T00:00:00.000Z --> 
    <div>date medium: {{jsonDate | fromMSDate | date:'medium'}}</div> <!-- == Jan 16, 2011 1:00:00 AM --> 
    <div>date short: {{jsonDate | fromMSDate | date:'short'}}</div> <!-- == 1/16/11 1:00 AM --> 

</div> 
+0

謝謝。按預期工作 – Eugen