8

次のようにjsonを返すサービスがあります。

"Results":[{"Id":"1","SomeDate":"2/19/2013 10:34:04 PM"}

バインディングを使用してフォーマットしようとすると、機能しません。上記の文字列が表示されるだけです。

{{values.SomeDate| date:'mediumTime' }}

ただし、次の形式で渡すだけで機能します。

{{ '1997-03-01T00:00:00+01:00' | date:'mediumTime'}}

これを修正する最善の方法は何ですか?

4

3 に答える 3

12

charlietfl のコメントで述べたように、クリーンなオプションは、組み込みの角度フィルターと既に互換性のある日付形式を返すようにサービスを更新することです。

ただし、これが不可能な場合は、カスタム フィルターを設定して日付を解析できます。

私がお勧めする (非常に小さい) ライブラリは Moment.js です: http://momentjs.com/

以下は、Moment.js をカスタム角度フィルターでラップする方法に関するブログ投稿の例です

angular.module('myModule').
    filter('fromNow', function() {
        return function(dateString) {
            return moment(new Date(dateString)).fromNow()
        };
    });

これは次のように使用されます。

{{ reply.createdDate | fromNow }}
于 2013-02-21T01:00:34.420 に答える
0

moment.js は日付を含む文字列を解析できるため、 moment.jsを使用してカスタム フィルターを作成するという@AlexOsborn の提案を支持します。私のフィルターの実装では、日付の書式設定も moment.js に委譲します

angular
.module("YourModuleNameHere")
.filter("formatdate", [function () {
    var result = function (date, formatstring) {
        if(formatstring === null) {
            formatstring = "DD MMM YYYY";
        }
        return moment(date).format(formatstring);
    }
    return result;
}]);

そして、angular.js 日付フィルターを使用するのと同じように使用します (ただし、日付をフォーマットするには、moment.js フォーマット コードを使用します)。

<p>Today is {{moment() | formatdate}}</p>
<p>Another date: {{values.SomeDate | formatdate:"ddd D MMM YYYY"}}</p>
于 2013-10-29T11:52:39.547 に答える