2013-11-21 3 views
93

Может ли кто-нибудь предложить мне, как конвертировать дату из этого 1387843200000 в формат 24/12/2013внутри моего контроллера?AngularJS - конвертировать даты в контроллер

Just 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

Вы можете использовать фильтр времени date.js angularjs date - https://github.com/urish/угловой момент – 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, «гггг-ММ -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

Все решения здесь не очень привязки модели к входу, потому что вы должны изменить обратно dateAsString быть сохранены как date в вашем объекте (в контроллер после формы будет отправлен).

Если вам не нужно обязывающее действие, но только, чтобы показать его на входе,

простой может быть:

<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

Да, ваше право, где мы хотим конвертировать нашу отметку времени на сегодняшний день –

Смежные вопросы