AngularJS-преобразование дат в контроллере

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

просто FYI мои даты хранятся таким образом и при привязке для редактирования формы с input type="date" поле вообще не заполняется.

#Plunker demo здесь.

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 );

фильтрация и форматирование даты в Angular js.


все решения здесь действительно не привязывают модель к входу, потому что вам придется изменить 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 для того, чтобы это работало.


Я предлагаю в Javascript:

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

и тогда date1-это дата.