Angular 4と.netコアで書かれたMVCアプリケーションを併用しています。 データはSignalR Serviceを使用して受信され、ハブはC#で記述されます。データベースは、受け取っますDATETIME2(7)フィールド(T-SQL)、コンテンツを提供し、(日付フィールドのために)次のようになります。角度4:日付パイプ、UTC現地時間までの時間:どのように角度を現在のタイムゾーンに伝えますか?
dueDt:"2017-10-02T08:54:00"
この時間はUTC時間です。私たちは+2時間帯に住んでいます。 は今、CSHTML・ファイルでは、我々はこのように、この値を表示しますよう
<small>Due: {{item.dueDt | date:'dd.MM.yy HH:mm'}}</small>
これは何かを表示: 結構です27.09.17 12:43 、問題は私たちのタイムゾーンではないだけということです+ 0ではなく+2であるため、時刻として14:43と表示されます。
私はAngulars DatePipeがクライアントのローカルタイムゾーンを使用していると読んだことがありますが、ここでは起こりそうにありません。 (私はchrome、firefox、Edgeでこれを試しました - 違いはありません)。 誰かがアイデアを持っているのですか、なぜこれが起こるのですか、またはどのように私が地元のタイムゾーンが何であるかをAngularに伝えることができますか? 私は角の瞬間も含めて試してみましたが、どちらも本当にうまくいきません。 (それは重要だと思うが、それは細かいことができるが、それは別の問題である)。
import { Injectable, Pipe, PipeTransform } from '@angular/core';
import * as moment from 'moment';
import { Observable } from 'rxjs/Rx';
import { UserService } from '../security/user/user.service';
@Pipe({
name: 'formatDate'
})
@Injectable()
export class DateTimePipe implements PipeTransform {
constructor(private userService: UserService) {
}
/**
* Asynchronous pipe, transforms a date into a formatted date.
* The transformation is based on the 'locale' and 'pattern' properties from the current user preferences.
* Usage: this pipe need to be followed by the'async' pipe, since it returns an Observable.
*/
transform(value: any, showTime?: boolean): Observable<string> {
if (value) {
return this.userService.getPreferences()
.map(prefs => {
const locale = prefs.preferences.get('locale');
let pattern;
if (showTime) {
pattern = prefs.preferences.get('dateTimeFormat') || 'DD/MM/YYYY HH:mm';
} else {
pattern = prefs.preferences.get('dateFormat') || 'DD/MM/YYYY';
}
moment.locale(locale);
let date = value instanceof Date ? value : new Date(value);
return moment(date).format(pattern);
});
}
return Observable.of(value);
}
}
あなたにも
moment.locale('en_GB')
瞬間をローカルに変更することができます:私はmoment.js
を使用して似たような行っているが、ロケールが、それは、各ロケールのためのユーザ設定と日付パターンに実際に固有のだ