Формат даты и времени в AngularJS

123

Как правильно отображать дату и время в AngularJS?

В выходных данных ниже показаны входные и выходные данные с фильтром даты AngularJS и без него:

In: {{v.Dt}}  
AngularJS: {{v.Dt | date:'yyyy-MM-dd HH:mm:ss Z'}}

Это печатает:

In: 2012-10-16T17:57:28.556094Z 
AngularJS: 2012-10-16T17:57:28.556094Z

Желаемый формат отображения - 2010-10-28 23:40:23 0400или2010-10-28 23:40:23 EST

BSR
источник

Ответы:

63

v.Dt, скорее всего, не является объектом Date ().

См. Http://jsfiddle.net/southerd/xG2t8/

но в вашем контроллере:

scope.v.Dt = Date.parse(scope.v.Dt);
Дэвид Саутер
источник
Дэвид, в моем случае дата хранится в базе данных в формате ДД / ММ / ГГГГ. Я конвертирую это, я показываю ему пользовательский формат DD.MM.YYYY в текстовом поле или беру пользовательский ввод в этом формате, и то же самое обновляется в моей модели. как изменить это перед передачей в БД. как мне измениться
Йогеш 09
120

Ваш код должен работать так, как вы видите эту скрипку .

Вы должны убедиться, что у вас v.Dtправильный объект Date, чтобы он работал.

{{dt | date:'yyyy-MM-dd HH:mm:ss Z'}}

или если dateFormat определен в области видимости как dateFormat = 'yyyy-MM-dd HH: mm: ss Z':

{{dt | date:dateFormat }}
Gloopy
источник
Поскольку формат является косметическим вариантом, обычно лучше делать это непосредственно на виде.
Puce
thnkx..super ans. можно ли показывать время в 12-часовом формате?
Вишну Прасад
dt может быть временной меткой unix в целочисленном формате, тоже работает
tom10271
это не обязательно должен быть Dateтип переменной. Timestamp long тоже хорошо работает
Влад
59

Я знаю, что это старый предмет, но подумал, что стоит рассмотреть другой вариант.

Поскольку исходная строка не включает разграничитель «T», реализация по умолчанию в Angular не распознает его как дату. Вы можете принудительно использовать новую дату, но это немного неудобно для массива. Поскольку вы можете объединить фильтры вместе, вы можете использовать фильтр для преобразования введенных вами данных в дату, а затем применить фильтр date: к преобразованной дате. Создайте новый настраиваемый фильтр следующим образом:

app
.filter("asDate", function () {
    return function (input) {
        return new Date(input);
    }
});

Затем в разметке вы можете соединить фильтры вместе:

{{item.myDateTimeString | asDate | date:'shortDate'}}
Джим Вули
источник
Да, более надежный и эффективный .. Спасибо, что поделился
azhar_SE_nextbridge
56

вы можете получить фильтр «дата» следующим образом:

var today = $filter('date')(new Date(),'yyyy-MM-dd HH:mm:ss Z');

Это даст вам сегодняшнюю дату в желаемом формате.

CodeOverRide
источник
лол да, Леандро. Я не знаю, как это случилось. Думаю, я думал «использовать».
CodeOverRide
49

Вот фильтр, который будет принимать строку даты ИЛИ объект Date () javascript. Он использует Moment.js и может применять любую функцию преобразования Moment.js , например популярную 'fromNow'.

angular.module('myModule').filter('moment', function () {
  return function (input, momentFn /*, param1, param2, ...param n */) {
    var args = Array.prototype.slice.call(arguments, 2),
        momentObj = moment(input);
    return momentObj[momentFn].apply(momentObj, args);
  };
});

Так...

{{ anyDateObjectOrString | moment: 'format': 'MMM DD, YYYY' }}

отобразит 11 ноября 2014 г.

{{ anyDateObjectOrString | moment: 'fromNow' }}

будет отображаться 10 минут назад

Если вам нужно вызвать несколько мгновенных функций, вы можете связать их. Это преобразуется в UTC, а затем форматирует ...

{{ someDate | moment: 'utc' | moment: 'format': 'MMM DD, YYYY' }}

https://gist.github.com/cmmartin/341b017194bac09ffa1a

Чарли Мартин
источник
Это более мощный метод ! Спасибо!
Моддер
2
Это великолепно, и его также можно комбинировать с Moment Timezone. например: {{foo.created_at | момент: 'tz': 'Америка / Нью-Йорк' | moment: 'format': 'h: mm a z'}}
Дэйв Коллинз
22

Вот несколько популярных примеров:

<div>{{myDate | date:'M/d/yyyy'}}</div> 7/4/2014

<div>{{myDate | date:'yyyy-MM-dd'}}</div> 2014-07-04

<div>{{myDate | date:'M/d/yyyy HH:mm:ss'}}</div> 04.07.2014 12:01:59

Джеймс Лорук
источник
простой, элегантный и именно то , что было предложено
Игнотус
15

Вы видели раздел документации « Написание директив (короткая версия) » ?

HTML

<div ng-controller="Ctrl2">
      Date format: <input ng-model="format"> <hr/>
      Current time is: <span my-current-time="format"></span>
</div> 

JS

function Ctrl2($scope) {
  $scope.format = 'M/d/yy h:mm:ss a';
}
гнаться
источник
2
Я считаю ваш комментарий очень верным. Обучение фильтрам - важная часть AngularJS. Это действительно не так уж и сложно.
Spock
6

Внутри контроллера формат можно отфильтровать, введя $ filter.

var date = $filter('date')(new Date(),'MMM dd, yyyy');
Tjs
источник
5

Если вы хотите вывести что-то вроде «30 января 2017 г., 16:31:20», следуйте простому шагу.

step1 - объявить следующую переменную в контроллере js

$scope.current_time = new Date();

step2 - отображение на html-странице, например

{{current_time | дата: 'средний'}}

Шани Сингх
источник
5

мы можем отформатировать дату на стороне просмотра в угловом формате, это очень просто ... проверьте пример ниже:

{{dt | date: "дд-ММ-гггг"}}

Раджат-Systematix
источник
3

Вы можете использовать momentjsдля реализации фильтра даты и времени в angularjs. Например:

angular.module('myApp')
 .filter('formatDateTime', function ($filter) {
    return function (date, format) {
        if (date) {
            return moment(Number(date)).format(format || "DD/MM/YYYY h:mm A");
        }
        else
            return "";
    };
});

Где дата в формате отметки времени.

Руби сайни
источник
1

Добавить $filterзависимость в контроллер.

var formatted_datetime = $filter('date')(variable_Containing_time,'yyyy-MM-dd HH:mm:ss Z')
Аникет Б
источник
2
Хотя этот фрагмент кода может решить вопрос, включение объяснения действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причины вашего предложения кода. Также постарайтесь не загромождать свой код пояснительными комментариями, это снижает удобочитаемость как кода, так и пояснений!
kayess
0

Я бы посоветовал вам использовать moment.js, у него хорошая поддержка форматирования даты в соответствии с местными стандартами.

создать фильтр, который внутренне использует метод moment.js для форматирования даты.

Рахул Токасе
источник