データベースから取得した日付は次のようになります。2013-11-21 17:43:20
Angular の日付フィルターを使用して、日付をもっときれいに表示しようとしていますが...
{{Objected.created | date:'shortDate'}}
または
{{Objected.created | date:'YYYY'}}
...元の日時文字列が出力されるだけです: 2013-11-21 17:43:20
。エラーはありません。何が間違っているのでしょうか?
アップデートMySQL のデフォルトの datetime は、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 日時を日付フィルターが期待する形式に変換するので、これを 1 つずつ送信すると、「出来上がり」になります。
ベストアンサー1
日付文字列を、ISO 8601 形式など、Angular でサポートされている形式に変換する必要があります。次のように変換できます。
$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;
};
});