2013-05-08 86 views
12

我使用bootstrap-datetimepicker和使用ISO8601日期时间格式yyyy-mm-ddThh:ii:ssZ在他们的选项部分AngularJS:如何格式化ISO8601日期格式?

提到在我的控制,我做

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

是什么我失踪了?

+0

我给来自Angular Doc – daydreamer 2013-05-08 23:29:23

+0

的示例格式可能希望使其与有效的*预期结果一致。 – user2246674 2013-05-08 23:30:20

回答

12

现在,我已经创建了一个过滤器

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 as

May 8, 2013 5:14:36 PM 

如果你知道一个更好的主意,请让我知道

9

在巴西(和大多数欧洲,澳洲等),我们使用默认的MySQL DATETIME在DB的:

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

但是使用日期()到这样显示的:

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

因此,为了在角度显示该日期,“正确”,创建过滤器:

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

然后,在你的角的应用程序,只需调用过滤器和显示格式的值:

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

,在巴西,英国,新西兰等涵盖的日期格式日期格式角,只需正确减去时区即可。

+0

这对格式化默认MySQL日期有很大的帮助。开箱即用。谢谢! – Jazzy 2013-11-20 23:44:13

37

我不明白为什么没有人提供在过滤器中使用正确格式的简单答案?

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

这将作为ISO-8601

1

格式化除了这一切,只是你有这样的变化,

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

尝试WIRTE它作为

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