2013-11-21 30 views
93

任何人都可以請我建議我如何將這個1387843200000格式的日期轉換爲這個24/12/2013在我的控制器內AngularJS - 在控制器中轉換日期

只是FYI我的日期以這種方式存儲&綁定到編輯窗體input type="date"字段根本沒有被填充。

#Plunker demo here.

EditCtrl

app.controller("EditCtrl", [ "$scope", "$filter", "db" function ($scope, $filter, db){ 

    // this gets me an item object 
    var item = db.readItem(); 

    // item date = 1387843200000 
    // this returns undefined 
    item.date = $filter('date')(date[ item.date, "dd/MM/yyyy"]); 

}]); 

Edit.html - 模板

<form name="editForm" class="form-validate"> 

     <div class="form-group"> 
      <label for="date">Event date.</label> 
      <input type="date" class="form-control" ng-model="event.date" id="date" required /> 
     </div> 

     <a href="#/" class="btn btn-danger ">Cancel</a> 
     <button id="addEvent" class="btn btn-primary pull-right" ng-disabled="isClean() || editForm.$invalid" ng-click="saveEvent()">Save event.</button> 

    </form> 
+1

爲什麼你需要在控制器中轉換?如果您只需要可顯示的值,則可以使用日期過濾器在視圖中格式化日期。 –

+0

@JustinNiessner - 我的日期以這種方式存儲&當綁定到編輯表單與'input type =「date」'字段沒有被填充 – Iladarsda

+1

您可以使用moment.js angularjs日期時間過濾器 - https://github.com/urish/angular-moment – virender

回答

188
item.date = $filter('date')(item.date, "dd/MM/yyyy"); // for conversion to string 

http://docs.angularjs.org/api/ng.filter:date

但是,如果您使用HTML5 type =「date」,則必須使用ISO格式yyyy-MM-dd。

item.dateAsString = $filter('date')(item.date, "yyyy-MM-dd"); // for type="date" binding 


<input type="date" ng-model="item.dateAsString" value="{{ item.dateAsString }}" pattern="dd/MM/YYYY"/> 

http://www.w3.org/TR/html-markup/input.date.html

注:使用模式=「」類型=「日期」看起來不標準,但它出現在預期的工作方式在Chrome 31

+0

謝謝。 ISO格式和字符串格式是很好的提示。我會留意這一點。 – Iladarsda

+0

嗨,我試圖執行建議,但它不適合我。 – Mukun

+0

嗨,我試圖執行建議,但它不適合我。我的spring webservice的響應是{「basicPersonalInfo」:{「empNo」:「04005001」,「dob」:490645800000},「communicationInfo」:null},我需要在我的引導程序/ HTML5日期輸入字段中顯示它。我在我的控制器中使用了過濾器,如\t $ scope.basicInfo = BasicInformationService.query(); \t \t \t $ scope.basicInfo。$ promise.then(功能(數據){\t \t \t \t \t $ scope.basicInfo.basicPersonalInfo.dob = $濾波器( '日期')(data.basicPersonalInfo.dob,「YYYY-MM -dd「); });任何幫助表示讚賞 – Mukun

16

創建filter.js,你可以使這爲可重用

angular.module('yourmodule').filter('date', function($filter) 
{ 
    return function(input) 
    { 
     if(input == null){ return ""; } 
     var _date = $filter('date')(new Date(input), 'dd/MM/yyyy'); 
     return _date.toUpperCase(); 
    }; 
}); 

視圖

<span>{{ d.time | date }}</span> 

或控制器

var filterdatetime = $filter('date')(yourdate); 

Date filtering and formatting in Angular js.

+1

看來已經有一個內置於AngularJS的日期過濾器:https://docs.angularjs.org/api/ng/filter/date –

+0

謝謝!爲我使用新的日期做了訣竅。 – butYouDontLookLikeADeveloper

1

所有的解決方案在這裏並沒有真正結合的模式,以輸入,因爲你將不得不改回在你的對象保存爲datedateAsString(以表格後的控制器將被提交)。

如果您不需要的約束力,而只是把它顯示在輸入,

一個簡單的可以是:

<input type="date" value="{{ item.date | date: 'yyyy-MM-dd' }}" id="item_date" /> 

然後,如果你喜歡,在控制器,你可以保存編輯後的日期以這樣的方式

$scope.item.date = new Date(document.getElementById('item_date').value).getTime(); 

注意:在您的控制器中,您必須聲明item變量爲$scope.item才能使其工作。

1

我建議在Javascript:

var item=1387843200000; 
var date1=new Date(item); 

,然後DATE1是一個日期。

+0

是您的權利,我們想要將我們的時間戳轉換爲日期 –