Angular Фильтр формата даты JS внутри Ng-Повторить не форматирование

Фактическая дата, исходящая от JSON

enter image description here

Необходимо отформатировать его, как показано ниже.

Effective Date : 2010-08-31 (trim the time stamp)
End Date : 2010-08-31 (trim the time stamp)

Используйте приведенный ниже код для форматирования даты внутри Ng-Repeat.

    <li ng-repeat="product in data | startFrom:currentPage*pageSize | limitTo:pageSize"
           ng-click="getAttributes(product)">   
       {{product.prod_start_date| date:'MM/dd/yyyy'}}
       {{product.prod_end_date| date:'MM/dd/yyyy'}}
    </li>

Но он не работает, пока отображается то же самое.

Если дата должна быть передана как новая дата, как показано в приведенном ниже примере jsfiddle   http://jsfiddle.net/southerd/xG2t8/

Заметьте, как это сделать внутри ng-repeat.?? Пожалуйста, помогите мне в этом. Спасибо в Advance

Ответ 1

Я создал свой собственный фильтр, чтобы решить эту проблему. Фильтр даты не может взять строку, нужен объект даты.

.filter('cmdate', [
    '$filter', function($filter) {
        return function(input, format) {
            return $filter('date')(new Date(input), format);
        };
    }
]);

то вы можете сделать:

{{product.prod_start_date| cmdate:'MM/dd/yyyy'}}

Ответ 2

Я использую time.js для обработки времени ввода данных в UI (даже приятный пакет angular-moment)

использование:

<span>{{product.prod_start_date | amDateFormat:'MM/dd/yyyy'}}</span>

Он имеет множество других опций, а также относительные даты и т.д.

Ответ 3

Я обновил контроллер, который вы показали на скрипке, и вот ваш обновленный фильтр

Здесь я использовал $filter ('date'), который является функцией самого Angular, чтобы отформатировать дату в желаемом формате.

Вот контроллер:

function Scoper($scope,$filter) {
    $scope.s = "2012-10-16T17:57:28.556094Z";
    var dateObj = new Date($scope.s);
    $scope.dateToShow = $filter('date')(dateObj,'yyyy-MM-dd');
    console.log($scope.dateToShow);
}