2015-10-26 3 views
8

Vorrei sapere se il seguente è il metodo giusto per gestire il tipo di dati datetime in WebApi 2, Javascript e database.Gestione del tipo di dati datetime tra javascript e WebApi 2

DateTime da Javascript per WebAPI:

var date = new Date(); 
var datestring = date.toISOString(); 
//Send datestring to WebApi 

DateTime da WebAPI a JavaScript:

//on getting datetime value from `http.get` call 
var dateFromServer = new Date(dateFromServer); 

WebAPI:

in arrivo da TE

  • fare nulla semplicemente memorizzare il datestring tornato nella colonna di database con tipo di dati datetime

data dal database Ottenere e la data Tornando al cliente:

  • non datetime manipolazione (restituire semplicemente come serializer WebApi Json ex: 2015-10-23 T18: 30: 00). Il client convertiva automaticamente il datetime UTC in datetime locale

risposta

8

Sì, se non si desidera gestire alcuna informazione sul fuso orario dell'utente ecc., Questo è un modo accettabile. Assicuratevi che ogni volta che volete una data prodotta dal server per un confronto o qualcos'altro per usare il metodo C# DateTime.UtcNow . Penso che Avere una "Global UTC Convention" sia una soluzione abbastanza sicura e buona ma ha dei limiti.

Ad esempio, se si desidera avvisare tutti gli utenti che si trovano in fusi orari diversi alle 09:00 (nel paese di ciascun utente), è impossibile sapere quando è "09:00" per ciascuno.

Un modo per risolvere questo (ed è quello che preferisco), è quello di memorizzare manualmente le informazioni sul fuso orario di ciascun utente separatamente sul database, e ogni volta che si vuole fare un confronto basta convertire il tempo.

TimeZoneInfo.ConvertTimeFromUtc(time, this.userTimezone); 

In alternativa, se si desidera memorizzare tutte le informazioni fuso orario sul server è possibile:

Invia la data da JavaScript al server utilizzando il seguente formato: "2014-02-01T09: 28: 56.321-10: 00 " ISO 8601 supporta anche i fusi orari sostituendo la Z con il valore + o - per l'offset del fuso orario.

Dichiarare i tipi di data dell'API WEB 2 con il tipo "DateTimeOffset".

Infine memorizzare le date all'interno del database utilizzando il tipo "datetimeoffset".

In questo modo sul server o sul database si dispone di tutte le informazioni relative all'ora e al fuso orario dell'utente.

Troverete this article utile