AngularJS - конвертировать даты в контроллер
Может ли кто-нибудь предложить мне, как преобразовать дату из этого формата 1387843200000
в этот 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"]);
}]);
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
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
ПРИМЕЧАНИЕ: использование pattern = "" с типом = "date" выглядит нестандартным, но, похоже, оно работает ожидаемым образом в Chrome 31.
Ответ 2
создайте 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 );
Фильтрация и форматирование даты в Angular js.
Ответ 3
Все решения здесь не привязывают модель к вводу, потому что вам нужно будет вернуть обратно 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
, чтобы она работала.
Ответ 4
Я предлагаю в Javascript:
var item=1387843200000;
var date1=new Date(item);
а затем date1 - дата.