Відформатувати час дати в 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

Відповіді:


63

v.Dt, ймовірно, не є об'єктом Date ().

Дивіться http://jsfiddle.net/southerd/xG2t8/

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

scope.v.Dt = Date.parse(scope.v.Dt);

Девід у моєму випадку зберігається у форматі DD / MM / РРРР у базі даних. Я конвертую, що я показую його у форматі DD.MM.YYYY користувача у текстовому полі або приймаю введення користувача у такому форматі, і те саме оновлюється у моїй моделі. як це змінити, перш ніж передавати його в БД. як мені змінитись
Йогеш

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 }}

Оскільки формат є косметичним варіантом, як правило, краща ідея зробити це безпосередньо з точки зору.
Пуче

thnkx..supers ans. чи можна показувати час у 12-годинному форматі?
Вишну Прасад

dt може бути і часовою
позначкою

не потрібно бути Dateтипом для змінної. Часова позначка теж працює добре
Влад

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

49

Ось фільтр, який буде приймати рядок дати АБО 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.create_at | момент: 'tz': 'Америка / Нью-Йорк' | момент: 'формат': 'год: мм а з'}}
Дейв Коллінз

22

Ось кілька популярних прикладів:

<div>{{myDate | date:'M/d/yyyy'}}</div> 4.07.2014

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

<div>{{myDate | date:'M/d/yyyy HH:mm:ss'}}</div> 4.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. Це справді не так складно.
Спок

6

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

var date = $filter('date')(new Date(),'MMM dd, yyyy');

5

Якщо ви хочете вивести на зразок "30 січня 2017 16:31:20 вечора", перейдіть до простого кроку

step1 - оголосити наступну змінну в контролері js

$scope.current_time = new Date();

step2 - відображення на html-сторінці

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


5

ми можемо відформатувати дату на стороні перегляду в кутовій дуже просто .... будь ласка, перевірте наведений нижче приклад:

{{dt | дата: "dd-MM-yyyy"}}


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

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

створити фільтр, який внутрішньо використовує метод moment.js для форматування дати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.