一尘不染

无法格式化默认的MySQL日期时间

angularjs

我的日期来自数据库,如下所示: 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日期时间转换为日期过滤器期望的格式,因此我将其发送给它,然后又抛出另一个“瞧”。


阅读 216

收藏
2020-07-04

共1个答案

一尘不染

您需要将日期字符串转换为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;
  };
});
2020-07-04