AngularJS: Как форматировать формат даты ISO8601?

Я использую bootstrap-datetimepicker и используя формат даты и времени ISO8601 как yyyy-mm-ddThh:ii:ssZ, как указано в разделе параметров

В моем контроллере я делаю

transaction.date = $('.form_datetime input').val();

который отправляет данные в бэкэнд как (console.log)

created_on: "Wed, 08 May 2013 23:18:32 -0000"

и сохраняет в базе данных как

2013-05-08 16:18:32-07

В моем шаблоне я делаю

<td>{{ transaction.created_on | date:'medium'}}</td>

и я вижу вывод в своем HTML как

Wed, 08 May 2013 23:18:32 -0000

Но согласно Angular doc, это должно быть для формата Oct 28, 2010 8:40:23 PM

Что мне не хватает?

Ответ 1

На данный момент я создал фильтр

angular.module('customFilters', []).
  filter('dateInMillis', function() {
    return function(dateString) {
      return Date.parse(dateString);
    };
  });

добавлен как зависимость в app.js как

var app = angular.module('myApp', [
  '$strap.directives', 'ngCookies', 'categoryServices', 'transactionServices',
  'customFilters'
]);

и в HTML использовали его как

<!-- added dateInMillis to pass to date to filter Angular way -->
<td>{{ transaction.created_on | dateInMillis | date: 'medium'}}</td>

и который показывает дату на HTML как

May 8, 2013 5:14:36 PM 

Если вы знаете лучшую идею, пожалуйста, дайте мне знать

Ответ 2

Я не понимаю, почему никто не предоставил простой ответ на использование правильного формата в фильтре?

{{item.date | date:'yyyy-MM-ddTHH:mm:ssZ'}}

Это будет отформатировано как ISO-8601

Ответ 3

В Бразилии (и большей части Европы, Австралии и т.д.) мы используем MySQL DATETIME по умолчанию для DB:

"Y-m-d HH:ii:ss"

Но используйте дату(), чтобы отобразить ее следующим образом:

"d/m/Y HH:ii:ss"

Итак, чтобы отобразить эту дату в angular, "правильно", создайте фильтр:

var app = angular.module(...

// Converts MySQL datetime into readable BR format
/*
    Converts 2013-10-18 18:47:15 into 1382122035000 so angular can format date 
    using brazilian standards
*/
app.filter('brDateFilter', function() {
    return function(dateSTR) {
        var o = dateSTR.replace(/-/g, "/"); // Replaces hyphens with slashes
        return Date.parse(o + " -0000"); // No TZ subtraction on this sample
    }
});

Затем в приложении angular просто вызовите фильтр и отформатируйте значение для отображения:

{{ item.datetime_value | brDateFilter | date:"dd/MM/yyyy HH:mm" }}

Что касается формата даты в формате Brazilian, UK, New Zealand и т.д. для angular, просто вычтите часовой пояс правильно.

Ответ 4

Помимо всего этого, у вас есть такие изменения,

<td>{{ transaction.created_on | date:'medium'}}</td>

попробуйте сделать это как

<td>{{ transaction.created_on | date:'MMM d, y h:mm:ss a'}}</td>