AngularJS: фильтр формата даты не форматирует дату

#angularjs

#angularjs

Вопрос:

Я пытаюсь отформатировать дату, возвращаемую в результирующем наборе API, в формате ММ, дд, гггг, но по какой-то причине это не работает. Ниже приведен код, который я использую, может кто-нибудь, пожалуйста, скажите мне, что я здесь упускаю / делаю неправильно? и как достичь указанного выше требуемого формата

           <div>
            <div>
              <p>Date Added:</p>
              {{memberData.DateJoined | date: 'MM dd, YYYY'}}
            </div>
          </div>    
  

также пробовал использовать

           <div>
            <div>
              <p>Date Added:</p>
              {{memberData.DateJoined | date: 'MM dd, yyyy'}}
            </div>
          </div>    
  

Дата, возвращаемая API, находится в формате:

      DatePosted: "2014-05-15 00:00:00"
  

Не рабочее определение:
Дата отображается как 2014-05-15 00:00:00, в то время как она должна отображаться как 15.05.2014 ИЛИ 15 мая 2014

Комментарии:

1. Пожалуйста, определите «не работает». Что вы получаете вместо ожидаемого результата?

2. И каков тип и значение memberData.DateJoined ?

3. Вопрос @JBNizet обновлен с помощью MemberData. Содержимое, связанное с датой, спасибо

4. Прочитайте документацию: docs.angularjs.org/api/ng/filter/date . Это объясняет, какие входные данные принимает фильтр даты. Ваш ввод не является одним из них.

Ответ №1:

Возможно, это просто опечатка, но YYYY она должна быть в нижнем регистре:

 {{memberData.DateJoined | date: 'MM dd, yyyy'}}
  

Редактировать: ваш исходный формат 2014-05-15 00:00:00 не является допустимым источником для Angular, поэтому вам нужно сначала преобразовать его в Date объект в контроллере:

 $scope.DateJoined = new Date('2014-05-15 00:00:00');
  

И тогда вы можете использовать:

 {{ DateJoined | date: 'MM dd, yyyy'}}
  

Смотрите Пример на JSFiddle.

Комментарии:

1. Пробовал использовать гггг и ГГГГ, оба не сработали. Спасибо

2. У меня такая же проблема. На сайте angular я прочитал: Date to format either as Date object, milliseconds (string or number) or various ISO 8601 datetime string formats так что он должен работать и со строкой типа 2014-05-15 00:00:00

Ответ №2:

В вашем контроллере angular создайте новую функцию для исправления возвращаемой даты:

 myApp.controller('myController', function($scope){

$scope.fixDate = function(date){
    return new Date(date);
};

..... rest of your controller goes here.
});
  

В HTML:

 {{fixDate(DatePosted) | date:  "MM dd, yyyy"}}
  

Вы также можете использовать эту функцию, если возвращаете массив дат, например, «orders_date» из базы данных, его можно использовать с ng-repeat директивой

Ответ №3:

Попробуйте поместить строку даты в Date объект:

 DatePosted = new Date(DatePosted)
  

Комментарии:

1. Не могли бы вы предоставить более подробную информацию?

2. Ваша дата находится в строковом формате, который фильтр даты angular, похоже, не знает, как обрабатывать. Если вы замените эту строку Date объектом (который может получить строку в своем конструкторе), фильтр будет работать так, как ожидалось. jsfiddle.net/5xG2M

3. Извините, но jsfiddle возвращает ошибку при попытке запустить ваш код. Можете ли вы, пожалуйста, проверить это?

4. странно, работает в Chrome, но не в FF. Ваш формат даты действительно странный. Попробуйте jsfiddle.net/5xG2M/1

5. Пожалуйста, просмотрите выбранный ответ. Это правильный ответ