web-dev-qa-db-ja.com

日付パイプangular 4カスタムフォーマットとタイムゾーン(短い)

タイムスタンプカスタムフォーマットをタイムゾーン(ショートフォーマット)で印刷する必要があります:

{{ '2017-06-29 09:55:01.956-0400' | date:'MMM dd, y hh:mm a' }}

出力:

2017年6月29日07:25 PM

ただし、たとえば、タイムゾーンを追加する必要があります。

2017年6月29日07:25 PM [〜#〜] ist [〜#〜]

Angularは'z''Z'でタイムゾーンオプションを提供しますが、期待される結果は得られませんでした。

'MMM dd, y hh:mm a  z' ==> Jun 29, 2017 07:25 PM India Standard Time
'MMM dd, y hh:mm a  Z' ==> Jun 29, 2017 07:25 PM GMT+5:30

Jul 7, 2017, 12:27:01 AM ISTが欲しいです。

3
mperle

DatePipeはIntlを使用して日付をフォーマットします。したがって、現在のタイムゾーンをどの形式で返すかを決定するのは、サイトが開いているシステム次第です。必要な動作を実現するには、必要なtimezoeの省略形を返すカスタムDatePipeを作成することをお勧めします。例えば:

import { Pipe } from "@angular/core";
import { DatePipe } from "@angular/common";

@Pipe({
    name: "myDate",
    pure: true
})
export class MyDatePipe extends DatePipe {
    transform(value: any, pattern: string = "mediumDate"): string|null {
        let result = super.transform(value, pattern);
        result += " " + this.map[Intl.DateTimeFormat().resolvedOptions().timeZone];
        return result;
    }
    map = {
        "Asia/Calcutta": "IST"
    };
}

ただし、可能な各タイムゾーンをmapオブジェクトに追加する必要があります。このアプローチを説明する プランカーサンプル を参照してください。

5
Gosha_Fighten