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

eme*_*his 25 javascript mysql datetime angularjs

我的日期来自数据库,看起来像这样: 2013-11-21 17:43:20

我正在尝试使用Angular的日期过滤器将它们变成更漂亮的东西,但......

{{Objected.created | date:'shortDate'}}
Run Code Online (Sandbox Code Playgroud)

要么

{{Objected.created | date:'YYYY'}}
Run Code Online (Sandbox Code Playgroud)

...只是吐出原始日期时间字符串:2013-11-21 17:43:20.没有错误.我究竟做错了什么?

更新 我发现MySQL的默认日期时间与Angular的数据过滤器所期望的不兼容.我试图像这样在飞行中转换它,但它会抛出错误:

<li ng-repeat="result in data">{{ new Date(result.Job.created).toISOString() | date:'shortDate'}}</li>
Run Code Online (Sandbox Code Playgroud)

我怀疑我不能以我正在尝试的方式实例化Date类.错误是$ parse:语法错误.

更新

感谢@ m59的帮助,我得到了一些小的调整......

HTML:

<html ng-app="myApp">
...
{{Object.created | dateToISO | date:'shortDate'}}
Run Code Online (Sandbox Code Playgroud)

JS:

var myApp = angular.module('myApp',[]);

myApp.filter('dateToISO', function() {
  return function(input) {
    input = new Date(input).toISOString();
    return input;
  };
});
Run Code Online (Sandbox Code Playgroud)

这个自定义过滤器将默认的MySQL日期时间转换为日期过滤器期望的格式,所以我发送它然后抛出另一个并且"瞧".

m59*_*m59 64

您需要将日期字符串转换为Angular支持的内容,例如ISO 8601格式.你可以像这样转换它:

$scope.Object.created = new Date($scope.Object.created).toISOString();
Run Code Online (Sandbox Code Playgroud)

现场演示(点击).

要在运行中执行此操作,您需要一个自定义过滤器.现场演示(点击).

标记:

<div>{{Object.created | dateToISO | date:'shortDate'}}</div>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

app.filter('dateToISO', function() {
  return function(input) {
    return new Date(input).toISOString();
  };
});
Run Code Online (Sandbox Code Playgroud)

更新:

这是一种手动转换日期的简单方法(firefox):

app.filter('badDateToISO', function() {
  return function(badTime) {
    var goodTime = badTime.replace(/(.+) (.+)/, "$1T$2Z");
    return goodTime;
  };
});
Run Code Online (Sandbox Code Playgroud)

  • 我不明白为什么地狱Angular不支持MySQL`DATETIME`提交开箱即用,它是最常用的数据库之一 (13认同)
  • 在firefox中失败了......`无效的日期` (4认同)
  • 谢谢你的帮助! (2认同)