AngularJS-преобразование дат в контроллере
может ли кто-нибудь предложить мне, как преобразовать дату из этого в этой 24/12/2013
внутри моего контроллера?
просто FYI мои даты хранятся таким образом и при привязке для редактирования формы с input type="date"
поле вообще не заполняется.
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"]);
}]);
правка.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>
4 ответов
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 гггг-ММ-ДД.
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
Примечание: использование pattern= ""с типом= "date" выглядит нестандартно, но, похоже, работает ожидаемым образом в Chrome 31.
создать фильтр.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 );
все решения здесь действительно не привязывают модель к входу, потому что вам придется изменить 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
переменная as $scope.item
для того, чтобы это работало.