我的日期来自数据库,如下所示: 2013-11-21 17:43:20
2013-11-21 17:43:20
我正在尝试使用Angular的日期过滤器将它们变成更漂亮的东西,但是…
{{Objected.created | date:'shortDate'}}
要么
{{Objected.created | date:'YYYY'}}
…只是吐出原始日期时间字符串:2013-11-21 17:43:20。没有错误。我究竟做错了什么?
更新 我看到MySQL的默认日期时间与Angular的数据过滤器期望的不兼容。我正在尝试像这样即时转换它,但会引发错误:
<li ng-repeat="result in data">{{ new Date(result.Job.created).toISOString() | date:'shortDate'}}</li>
我怀疑我无法以尝试的方式实例化Date类。该错误是$ parse:syntax错误。
更新资料
感谢@ m59的帮助,我做了一些小的调整。
HTML:
<html ng-app="myApp"> ... {{Object.created | dateToISO | date:'shortDate'}}
JS:
var myApp = angular.module('myApp',[]); myApp.filter('dateToISO', function() { return function(input) { input = new Date(input).toISOString(); return input; }; });
这个自定义过滤器将默认的MySQL日期时间转换为日期过滤器期望的格式,因此我将其发送给它,然后又抛出另一个“瞧”。
您需要将日期字符串转换为Angular支持的格式,例如ISO 8601格式。您可以这样转换:
$scope.Object.created = new Date($scope.Object.created).toISOString();
现场演示在这里(单击)。
为此,您需要一个自定义过滤器。 现场演示在这里(单击)。
标记:
<div>{{Object.created | dateToISO | date:'shortDate'}}</div>
JavaScript:
app.filter('dateToISO', function() { return function(input) { return new Date(input).toISOString(); }; });
这是手动转换日期(Firefox)的简单方法:
app.filter('badDateToISO', function() { return function(badTime) { var goodTime = badTime.replace(/(.+) (.+)/, "$1T$2Z"); return goodTime; }; });