デフォルトのMySQLの日時をフォーマットできません 質問する

デフォルトのMySQLの日時をフォーマットできません 質問する

データベースから取得した日付は次のようになります。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;
  };
});

おすすめ記事