AngularJSで日付時刻をフォーマットする


123

AngularJSで日付と時刻を正しく表示するにはどうすればよいですか?

以下の出力は、AngularJS日付フィルターがある場合とない場合の入力と出力の両方を示しています。

In: {{v.Dt}}  
AngularJS: {{v.Dt | date:'yyyy-MM-dd HH:mm:ss Z'}}

これは印刷します:

In: 2012-10-16T17:57:28.556094Z 
AngularJS: 2012-10-16T17:57:28.556094Z

希望の表示形式は 2010-10-28 23:40:23 0400または2010-10-28 23:40:23 EST

回答:


63

v.DtはおそらくDate()オブジェクトではありません。

http://jsfiddle.net/southerd/xG2t8/を参照してください

しかしあなたのコントローラーで:

scope.v.Dt = Date.parse(scope.v.Dt);

私の場合、DavidはデータベースにDD / MM / YYYY形式で保存されています。テキストボックスにユーザーDD.MM.YYYY形式を表示するか、その形式でユーザー入力を取得すると、モデルで更新されます。DBに渡す前に変更する方法。どのように変更すればよいですか
Yogesh

120

このフィドルを見ると、コードは機能するはずです。

ただしv.Dt、適切に機能するDateオブジェクトであることを確認する必要があります。

{{dt | date:'yyyy-MM-dd HH:mm:ss Z'}}

または、dateFormatがスコープ内でdateFormat = 'yyyy-MM-dd HH:mm:ss Z'として定義されている場合:

{{dt | date:dateFormat }}

この形式は表面的なオプションであるため、一般的にはビューで直接行うことをお勧めします。
Puce

thnkx..super ans。12時間形式で時間を表示することは可能ですか?
Vishnu Prasad 2015

dtは整数形式のUNIXタイムスタンプにすることもできます
tom10271

Date変数の型である必要はありません。タイムスタンプも長く機能します
Vlad

59

これは古いアイテムであることは知っていますが、別のオプションを検討する必要があると思いました。

元の文字列には "T"マーカーが含まれていないため、Angularのデフォルトの実装ではそれを日付として認識しません。新しい日付を使用してそれを強制することができますが、それは配列に少し苦労します。フィルターを一緒にパイプ処理できるため、フィルターを使用して入力を日付に変換し、変換された日付にdate:フィルターを適用できる場合があります。次のように新しいカスタムフィルタを作成します。

app
.filter("asDate", function () {
    return function (input) {
        return new Date(input);
    }
});

次に、マークアップで、フィルターを一緒にパイプ処理できます。

{{item.myDateTimeString | asDate | date:'shortDate'}}

ええ、より信頼性が高く効率的です。共有してくれてありがとう
azhar_SE_nextbridge

56

次のような「日付」フィルターを取得できます。

var today = $filter('date')(new Date(),'yyyy-MM-dd HH:mm:ss Z');

これにより、今日の日付が希望する形式で表示されます。


笑はい、Leandro。どのようにしてそれができたのか、私にはわかりません。私は「使用」を考えていたと思います。
CodeOverRide 2014年

49

次に、日付文字列またはjavascript Date()オブジェクトを取得するフィルターを示します。Moment.jsを使用し、人気のある「fromNow」など、あらゆるMoment.js変換関数を適用できます。

angular.module('myModule').filter('moment', function () {
  return function (input, momentFn /*, param1, param2, ...param n */) {
    var args = Array.prototype.slice.call(arguments, 2),
        momentObj = moment(input);
    return momentObj[momentFn].apply(momentObj, args);
  };
});

そう...

{{ anyDateObjectOrString | moment: 'format': 'MMM DD, YYYY' }}

2014年11月11日を表示します

{{ anyDateObjectOrString | moment: 'fromNow' }}

10分前に表示されます

複数のモーメント関数を呼び出す必要がある場合は、それらを連鎖させることができます。これはUTCに変換してからフォーマットします...

{{ someDate | moment: 'utc' | moment: 'format': 'MMM DD, YYYY' }}

https://gist.github.com/cmmartin/341b017194bac09ffa1a


より強力な方法です!ありがとう!
Modder

2
これは素晴らしく、モーメントタイムゾーンと組み合わせることもできます。例:{{foo.created_at | モーメント: 'tz': 'America / New_York' | moment: 'format': 'h:mm a z'}}
デイブコリンズ

22

ここにいくつかの人気のある例があります:

<div>{{myDate | date:'M/d/yyyy'}}</div> 2014年7月4日

<div>{{myDate | date:'yyyy-MM-dd'}}</div> 2014-07-04

<div>{{myDate | date:'M/d/yyyy HH:mm:ss'}}</div> 2014年7月4日12:01:59


シンプルでエレガント、そしてまさに求められたもの
Ignotus 2017年

15

ドキュメント書き込みディレクティブ(ショートバージョン)のセクションを見ましたか?

HTML

<div ng-controller="Ctrl2">
      Date format: <input ng-model="format"> <hr/>
      Current time is: <span my-current-time="format"></span>
</div> 

JS

function Ctrl2($scope) {
  $scope.format = 'M/d/yy h:mm:ss a';
}

2
あなたのコメントはとても有効だと思います。フィルターを行うことを学ぶことは、AngularJSの重要な部分です。それほど難しいことではありません。
Spock

6

コントローラ内では、$ filterを挿入することでフォーマットをフィルタリングできます。

var date = $filter('date')(new Date(),'MMM dd, yyyy');

5

「Jan 30、2017 4:31:20 PM」のように出力する場合は、簡単な手順に従ってください。

step1- jsコントローラーで次の変数を宣言する

$scope.current_time = new Date();

step2-のようにhtmlページに表示

{{current_time | 日付: '中'}}


5

ビュー側の日付を角度でフォーマットするのは非常に簡単です。以下の例を確認してください。

{{dt | 日付: "dd-MM-yyyy"}}


3

を使用momentjsして、angularjsに日時フィルターを実装できます。例えば:

angular.module('myApp')
 .filter('formatDateTime', function ($filter) {
    return function (date, format) {
        if (date) {
            return moment(Number(date)).format(format || "DD/MM/YYYY h:mm A");
        }
        else
            return "";
    };
});

日付はタイムスタンプ形式です。


1

$filterコントローラに依存関係を追加します。

var formatted_datetime = $filter('date')(variable_Containing_time,'yyyy-MM-dd HH:mm:ss Z')

2
このコードスニペットは問題を解決する可能性がありますが、説明を含めると、投稿の品質を向上させるのに役立ちます。あなたは将来の読者のための質問に答えていることを覚えておいてください、そしてそれらの人々はあなたのコード提案の理由を知らないかもしれません。また、コードと説明コメントを混同しないようにしてください。これにより、コードと説明の両方が読みにくくなります。
kayess 2016年

0

ロケールに応じた日付フォーマットのサポートが充実しているmoment.jsを使用することをお勧めします。

日付をフォーマットするために内部でmoment.jsメソッドを使用するフィルターを作成します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.