2017-09-29 5 views
4

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を使用して似たような行っているが、ロケールが、それは、各ロケールのためのユーザ設定と日付パターンに実際に固有のだ

答えて

関連する問題