2016-08-24 136 views
0

嗨,我想知道如何轉換JSON字符串日期來自格式響應像「8/24/2016」。我做了一個dateFilter.js位,它沒有按預期工作,所以這是我的嘗試。如何將JSON字符串日期轉換爲自定義格式日期?

這裏的dateFilter.js(實際上它沒有工作錯誤:數據遞歸)

(function() { 

    angular 
     .module('myapp') 
     .filter('date', function ($filter) { 

      return function (input) { 

       if (input == null) { 

        return ""; 
        } 
       var _date = $filter('date')(new Date(input), 'dd/MM/yyyy'); 

       return _date.toUpperCase(); 
      }; 
     }); 
})(); 

以下是我得到JSON與服務(的代碼是不完整的,因爲我想說明我怎麼得到響應。

function GetEmpDetails(successcallback, failcallback) { 

      var req = { 
       method: 'GET', 
       url: 'http://localhost:2222/api/GetEmployees/GetEmployeeDetails', 
       headers: { 
        'Content-Type': 'application/json' 
       } 
      } 
      $http(req).then(successcallback, failcallback); 
     } 

的controller.js

(function initController() { 

    EmployeeService.GetEmpDetails(function (res) { 
     $scope.employeeDetails = JSON.parse(res.data); 

     //console.log(res.data); 

     } 
    }); 

最後將過濾器應用於html。

<table id="basic-datatables" class="table table-striped table-bordered" cellspacing="0" width="100"> 
    <thead style="text-align:match-parent"> 
     <tr> 
      <th rowspan="1" colspan="1" style="width:195px">First Name</th> 
      <th rowspan="1" colspan="1" style="width:195px">Last Name</th> 
      <th rowspan="1" colspan="1" style="width:200px">Date Of Birth</th> 
      <th rowspan="1" colspan="1" style="width:100px">Gender</th> 
      <th rowspan="1" colspan="1" style="width:200px">Email</th> 
      <th rowspan="1" colspan="1" style="width:100px">Mobile</th> 
      <th rowspan="1" colspan="1" style="width:190px">Designation</th> 
      <th rowspan="1" colspan="1" style="width:200px">Date of Join</th> 
      <th rowspan="1" colspan="1" style="width:195px">NIC</th> 
      <th rowspan="1" colspan="1" style="width:100px">Dept. Name</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr ng-repeat="emp in employeeDetails.slice(((currentPage-1)*itemsPerPage),((currentPage)*itemsPerPage))" style="text-align:center"> 
      <td>{{emp.fname}}</td> 
      <td>{{emp.lname}}</td> 
      <td>{{emp.DOB | date}}</td> //applying the filter 
      <td>{{emp.gender}}</td> 
      <td>{{emp.email}}</td> 
      <td>{{emp.mobile_no}}</td> 
      <td>{{emp.designation}}</td> 
      <td>{{emp.date_of_join | date}}</td> //applying the filter 
      <td>{{emp.nic}}</td> 
      <td>{{emp.department_name}}</td> 
     </tr> 
    </tbody> 
</table> 

那麼,我會如何做到這一點是有任何其他方式的轉換。

Final note: right now without the filter: 7/25/2016 12:00:00 AM want to convert to 7/25/2016

幫助,將不勝感激。

+0

你有沒有嘗試{{EMP。DOB | date:'MM/dd/yyyy'}} –

+0

您可能想要清除所有不相關的代碼並只保留所需的內容。 –

+0

這不是「JSON字符串日期」,而只是一個字符串。 JSON不會聲明任何日期數據類型。 – zerkms

回答

1

試試這段代碼。我認爲這能解決你的問題:

<td>{{emp.DOB | dateFormat}}</td> 

角過濾:

.filter('dateFormat', function() { 
    return function(dt) { 
     var dt = new Date(dt); 
     return (dt.getMonth()+1)+'/'+dt.getDate()+'/'+dt.getFullYear(); 
    }; 
    }) 
+0

謝謝:D。像魅力一樣工作。 –

2

您可以將字符串先轉換爲實際的日期,然後應用內置的日期過濾器:

在你的控制器:

$scope.convertToDate = function(date){ 
     var dateOut = new Date(date); 
     return dateOut; 
}; 

在你的HTML:

<td ng-bind="convertToDate(date) | date:'MM/dd/yyyy'"></td> 

另一種選擇可以在您的過濾器中使用moment.js

moment(input, 'MM/dd/yyyy') 

此外,你的過濾器可能不工作的原因是它的名字。嘗試改變其他任何東西,如myDate

UPDATE

我想我知道爲什麼你越來越recursion錯誤!這是因爲您的自定義過濾器的名稱!您的過濾器稱爲date,過濾器中內置的角度也稱爲date。也許他們最終會互相打電話而陷入遞歸。只需更改名稱就可以做到這一點。

+0

嗨有一個反覆出現的錯誤說:太多的遞歸:(任何意見? –

+0

@AshaneAlvis你試過哪個選項?都是導致同樣的錯誤? –

+0

嗨@Jahongir,ti2005答案爲我工作。幫助我出局 –

1

可使用NPM模塊moment.js來實現。我創造了一個小提琴。看看這個。

var date = moment("7/25/2016 12:00:00 AM").date(); 
var month = moment("7/25/2016 12:00:00 AM").month(); 
var year = moment("7/25/2016 12:00:00 AM").year(); 
console.log(''+month+'/'+ date + '/'+ year); 

https://jsfiddle.net/Refatrafi/1jq7o2uq/

相關問題