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>