Угловой фильтр даты не работает с миллисекундами (строка или число)

0

У меня есть что-то вроде этого на мой взгляд:

{{1288323623006 | date:'%d/%m/%Y %I:%M:%S %p'}}

Но это вызывает у меня ошибку в моей консоли: Изображение 174551

Когда я конвертирую миллисекунды в объект даты в своем контроллере, например:

$scope.myDate = new Date(1288323623006);

и, на мой взгляд,

{{myDate  | date:'%d/%m/%Y %I:%M:%S %p'}}

то он показывает 29/10/2010 06:40:23 AM как ожидалось.

Вот пример из Angular Docs, который выдает указанную выше ошибку в моей консоли.

Я могу преобразовать дату в объект и передать его в представление, но мне интересно управлять им таким образом, потому что я не хочу использовать такие исправления.

Я ничего не меняю в своем I18nAdapter.

У кого-то была аналогичная проблема?

Теги:
date
angularjs-filter

3 ответа

0
Лучший ответ

Я недавно решил эту проблему, и теперь я отправляю свое решение.

Оказалось, что угловые фильтры не работают из-за локализационных фильтров, которые использовались вместо этого.

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

0

Потому что вы пытаетесь проанализировать не-дату объекта. Вам необходимо передать фильтр объекту Date, так же, как вы делаете в своем контроллере. Вы должны сделать что-то вроде:

{{new Date(1288323623006) | date:'%d/%m/%Y %I:%M:%S %p'}}
  • 0
    в документации написано, что вы можете передать и то, и другое, миллисекунды как число / число или объект Date. И вы можете увидеть это в действии в примере с plunkr в квесте
  • 0
    Кстати, я тоже пытался, но это не работает
0

Вы можете создать собственный фильтр и использовать его со своим значением следующим образом:

Фильтр:

.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' }}
  • 0
    Я читаю документацию. Это не формат. Я тоже попробовал твой формат. Я сказал, что он отлично работает, когда объект передается в представлении для фильтрации (форматирования), но не работает, когда передаются миллисекунды.
  • 0
    Но это работает отлично. Смотрите это JSFiddle: jsfiddle.net/thepio/qrr451pk
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню