オブジェクトのコレクションを返すRESTサービスがあり、アイテムのフィールドの1つは次のように日付文字列(ISO-8601形式)と日付値です
「createdDate」:「2017-02-21T12:56:50.907」、
Angular4 UIでは、DatePipeを使用して上記の日付をフォーマットします
{{resultItem.createdDate| date:'short'}}
そして、私は次のように間違った変換を得ています
2017年2月21日、午前7時56分
の代わりに
2017年2月21日、午前0時56分
タイムゾーン付きの日付からUTC日付を作成する必要があるかもしれません...私はあなたが太平洋時間帯にいると仮定します。時刻はUTCから7時間です...
このコードを試して、タイムゾーンなしで新しい日付オブジェクトを取得します(変数の名前が「date」であると仮定):
var datewithouttimezone = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
カスタムパイプを追加して問題を解決しました。
私のカスタムパイプは、Birwinが提供するソリューションに基づいています。 バーウィンに感謝。
これは、UtcDateという名前のカスタムパイプです。
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'utcDate'
})
export class UtcDatePipe implements PipeTransform {
transform(value: string): any {
if (!value) {
return '';
}
const dateValue = new Date(value);
const dateWithNoTimezone = new Date(
dateValue.getUTCFullYear(),
dateValue.getUTCMonth(),
dateValue.getUTCDate(),
dateValue.getUTCHours(),
dateValue.getUTCMinutes(),
dateValue.getUTCSeconds()
);
return dateWithNoTimezone;
}
}
また、デフォルトの日付パイプを使用してフォーマットします
{{createdDate | utcDate | date:'short'}}
次のように、日付パイプに別のパラメーターを渡すことができます。
{{resultItem.createdDate |日付: 'short': 'UTC'}}
このパラメーターは、'-0430'
または'GMT'
のようなタイムゾーンにすることができます
ドキュメントを参照してください: https://docs.angularjs.org/api/ng/filter/date