У меня есть что-то вроде этого на мой взгляд:
{{1288323623006 | date:'%d/%m/%Y %I:%M:%S %p'}}
Но это вызывает у меня ошибку в моей консоли:
Когда я конвертирую миллисекунды в объект даты в своем контроллере, например:
$scope.myDate = new Date(1288323623006);
и, на мой взгляд,
{{myDate | date:'%d/%m/%Y %I:%M:%S %p'}}
то он показывает 29/10/2010 06:40:23 AM
как ожидалось.
Вот пример из Angular Docs, который выдает указанную выше ошибку в моей консоли.
Я могу преобразовать дату в объект и передать его в представление, но мне интересно управлять им таким образом, потому что я не хочу использовать такие исправления.
Я ничего не меняю в своем I18nAdapter.
У кого-то была аналогичная проблема?
Я недавно решил эту проблему, и теперь я отправляю свое решение.
Оказалось, что угловые фильтры не работают из-за локализационных фильтров, которые использовались вместо этого.
То, что я сделал, это отключить локализованные фильтры дат, прокомментировав эти строки внутри нашей библиотеки i18n.js
:
angular.module('app.filters.I18nAngular', []).filter('translate', function() {
return function(key, obj) {
return i18nAdapter.translate(key, obj);
};
}).filter('number', function() {
return function(value, options) {
return i18nAdapter.formatNumber(value, options);
};
}).filter('currency', function() {
return function(value) {
return i18nAdapter.formatCurrency(value);
};
});
// .filter('date', function() {
// return function(value, format) {
// return i18nAdapter.formatDate(value, format);
// };
// });
У i18nAdapter
есть собственное форматирование и фильтры, похожие на угловые, но в нашем случае мы просто отлично используем те, которые угловые обеспечивают.
Потому что вы пытаетесь проанализировать не-дату объекта. Вам необходимо передать фильтр объекту Date, так же, как вы делаете в своем контроллере. Вы должны сделать что-то вроде:
{{new Date(1288323623006) | date:'%d/%m/%Y %I:%M:%S %p'}}
Вы можете создать собственный фильтр и использовать его со своим значением следующим образом:
Фильтр:
.filter('millisecondsToDate', function($filter) {
return function(millseconds) {
var timeString = $filter('date')(new Date(millseconds),'d/M/yyyy HH:mm:ss a');
return timeString;
};
})
HTML:
{{ 1288323623006 | millisecondsToDate }}
Это выйдет 29/10/2010 06:40:23 AM
.
РЕДАКТИРОВАТЬ:
На самом деле это тоже работает:
{{ 1288323623006 | date: 'd/M/yyyy HH:mm:ss a' }}
Таким образом, у вас был неправильный формат даты, и поэтому Angular не может преобразовать его в дату.
Пожалуйста, см. Документацию по дате AngularJS для правильного формата.
Здесь JSFiddle: https://jsfiddle.net/thepio/qrr451pk/
EDIT 2:
С i18n вы попробовали следующее?
{{ 1288323623006 | date:'short'}}
Или с пользовательским форматированием:
{{ 1288323623006 | date:'d/M/yy h:mm:ss a' }}