2017-08-28 7 views
0

私はどのようにアプローチするのか不明な奇妙な状況があります。私は開発モードでASP.NET Core Angularアプリケーションを持っています。私はこのようにデータベースにオブジェクトを持つ投稿要求を送信しています。アングルポストサービスは、MVCコントローラに送信する前にオブジェクトの日付を編集します

createPosition(pos) 
{ 

    console.log(pos, "Just before we send the position to the server"); 

    return this.authHttp.post('/api/positions', pos) 
     .map(res=>res.json()) 
     .catch((error:Response)=>{ 
     return Observable.throw(new AppError(error)); 
    }); 
} 

は今、日付オブジェクトは、POSオブジェクトの内側にあり、私はコンソールで、この時点でのPOSオブジェクトをデバッグする場合、私は価値のためにこれを取得:

ENTRYDATE:火曜2017年8月1日00: 00:00 GMT + 0300

(ローマ時(冬))のカッコ内のロシア語のテキストは気にしないでください。しかし、コントローラー(私は任意の操作の前にオブジェクトを取得する入力の右側)で私は別の時間を得る。

ENTRYDATEは、[日時]:{2017年7月31日夜9時00分00秒}

私はそれが起こっている理由は分からないが... 誰もがこの問題を持っていましたか?それはREST経由でのようにあなたは、インスタンスを渡すことはできません

コントローラ

[HttpPost("/api/positions")] 
    [Authorize] 
    public IActionResult CreatePosition([FromBody] Trade position) 
    { 
     //if I debug at this point I already have the weird date 

     context.Trades.Add(position); 
     context.SaveChanges(); 
     return Ok(position); 
    } 
+0

ここで、オブジェクトタイムを 'this point in time'としますが、 'コントローラでは'とはどういう意味ですか? –

+0

オブジェクト時刻は、角度材質日付ピッカーコンポーネントを使用してフォームから入力する単純なものです。 –

+0

そして今コントローラーによって 'createPosition'というサービスメソッドで言っているのですが、このメソッドに値を送るには、オブジェクトに日付を設定するときに何かするのですか?これは残りのAPIの問題です。それは私が推測する日付を変換しています –

答えて

0

、あなたは文字列を渡す必要があります。 私はあなたがタイムスタンプを渡すことをお勧め:

dateObject.getTime() 

、最終的にコントローラ内のDateオブジェクトを再作成:

let dateObject = new Date(timestampString); 
+0

私は角度が自分のクライアント時間に応じてローカルに時刻を設定し、MVCは現地時間を読み取り、それをUTCに3時間減算するように調整していることを知りました。コントローラは、インスタンスを受け入れるのに何の問題もなく、私はタイムゾーンの設定をしなければならず、クライアントタイムゾーンを何らかの形で使用するように指示しなければならないと思います。 –

+0

クライアントのタイムゾーンが、コントローラのentryDate:Tue Aug 01 2017 00:00:00 GMT + 0300(Романскоевремя(зима))にオブジェクトと共に入ってきているので、コントローラにそれを使用するように指示し、調整しないでくださいUTC。 –

+0

問題は、コントローラに入ってくるオブジェクトをデバッグする場合、Kind [DateTimeKind]:Utcがtrueであることを示します。それは正しい時刻です。 GMT + 3 Romanのクライアント入力TImezoneとMVCは同じ時間でUTC形式でデータベースに保存します。しかし、クライアントに時刻を表示したいときは、データベースからUTC時刻を取得しますが、クライアントはローマ字形式で保存していました。クライアントタイムゾーンに関する情報は正しく渡されず、私はそれを扱うことができません。 –

0

だから、M_によって提案された回避策の後に私が使用するハックを考え出しました。私は時間がサーバー上のUTCに格納されているかどうか気にしません。クライアントがどこにいても、データベースに入力した時刻が単一ゾーン形式で保存されているため、実際には問題ありません。

次に、クライアントが今どこにいるかによって、タイムゾーンを取得し、データベースに格納されている値から加減算して、クライアントが自分のローカル時刻に合わせて保存された値を最も適切に表現できるようにします瞬間。

ここにコードがあります。サーバーから日付を取得するたびに、私は今これを行い、完全にうまく調整します。 (this.positionは私がこのケースでentryDateを持っている私のオブジェクトです)

let offset = new Date().getTimezoneOffset(); 
let entryDateFromServer = new Date(this.position.entryDate); 
let timeInMs = entryDateFromServer.getTime(); 
var localEntryDate = new Date(); 
localEntryDate.setTime(timeInMs-(60000*offset)); 
this.position.entryDate= localEntryDate; 

ありがとうございました。

関連する問題