#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/5xG2M3. Извините, но jsfiddle возвращает ошибку при попытке запустить ваш код. Можете ли вы, пожалуйста, проверить это?
4. странно, работает в Chrome, но не в FF. Ваш формат даты действительно странный. Попробуйте jsfiddle.net/5xG2M/1
5. Пожалуйста, просмотрите выбранный ответ. Это правильный ответ