Issue
My dates come out of the database looking like this: 2013-11-21 17:43:20
I'm trying to user Angular's date filter to turn them into something prettier, but...
{{Objected.created | date:'shortDate'}}
or
{{Objected.created | date:'YYYY'}}
...just spits out the original datetime string: 2013-11-21 17:43:20
. There are no errors. What am I doing wrong?
Update I see that MySQL's default datetime is incompatible with what Angular's data filter expects. I'm attempting to convert it on the fly like this but it's throwing errors:
<li ng-repeat="result in data">{{ new Date(result.Job.created).toISOString() | date:'shortDate'}}</li>
I suspect I can't instantiate the Date class in the way I'm trying. The error is a $parse:syntax error.
Update
Thanks to @m59's help, I got it working with a few minor adjustments...
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;
};
});
This custom filter converts the default MySQL datetime into the format that the date filter expects, so I send it throw one then another and "voila".
Solution
You need to convert your date string to something supported by Angular, like ISO 8601 format. You could convert it like this:
$scope.Object.created = new Date($scope.Object.created).toISOString();
To do this on the fly, you need a custom filter. Live demo here (click).
Markup:
<div>{{Object.created | dateToISO | date:'shortDate'}}</div>
JavaScript:
app.filter('dateToISO', function() {
return function(input) {
return new Date(input).toISOString();
};
});
Update:
Here's a simple way to convert your date manually (firefox):
app.filter('badDateToISO', function() {
return function(badTime) {
var goodTime = badTime.replace(/(.+) (.+)/, "$1T$2Z");
return goodTime;
};
});
Answered By - m59
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.