簡體   English   中英

在ASP.NET MVC中處理日期的最佳方法-Javascript應用程序

[英]The best way to deal with dates in a ASP.NET MVC - Javascript application

我們的應用程序heavilly依賴javascript(jQuery)。 因此,有很多“ application / json”請求。

我們一直在努力解決日期問題,但是盡管我們付出了很多努力,但仍無法弄清楚如何在ASP.NET MVC應用程序中處理日期。

這是我們想要的:

  1. 在服務器端序列化/反序列化DateTime對象(最好使用DateTimeKind.Utc)。
  2. 在客戶端使用Date對象。 在UTC中使用它。 以某種方式格式化日期。

這里有問題:

  1. 日期客戶端對象始終具有最終用戶的時區。 JSON.stringify(new Date())自動進行移位。

    JSON Stringify由於UTC更改日期時間

    這個問題可以幫助您一點,但是我們需要記住在將日期發送到服務器之前先更改日期。 我們還需要記住,一旦我們執行了new Date('2012-10-19T10:23:47.778Z') ,就需要進行一次new Date('2012-10-19T10:23:47.778Z')我們知道JSON不知道日期,但是使用JSON類似物會很好。解析將解析日期。

  2. 我們使用Newton Json.net對日期進行序列化/反序列化,但是它在DateTimeKind中進行。

題:

是否有一種優雅的方式在服務器和客戶端上使用日期? 我們需要將它作為整個應用程序中的一個交叉領域。

UPD:

我必須說得更清楚。 在我們的應用程序中,由於我們僅處理日期,因此不需要考慮客戶時區。

因此,如果服務器返回2012-10-19T10:23:47.778Z' ,則需要Date對象:

Fri Oct 19 2012 10:23:47 GMT+0300 (Kaliningrad Standard Time)

Fri Oct 19 2012 13:23:47 GMT+0300 (Kaliningrad Standard Time) (日期已Fri Oct 19 2012 13:23:47 GMT+0300 (Kaliningrad Standard Time)

我強烈建議閱讀以下文章:

得出一般結論,您應該使用ISO日期:

  • 通過在客戶端使用現代瀏覽器.toJSON()方法
  • 通過在服務器端的正確配置JSON序列化( JsonNetFormatterIsoDateTimeConverter

最好的方法可能是發送一個自1970-01-01T00:00:00Z以來的毫秒數的時間值(即UTC),然后您可以執行new Date(timeValue)並將日期對象設置為該UTC時間。 它將基於客戶端系統時區設置返回日期和時間。

例如對我來說:

alert(new Date(0)); // Thu Jan 01 1970 10:00:00 GMT+1000 (EST)

如果您在客戶端上弄亂了該日期對象(例如添加一天),則只需發送回時間值即可:

var timeValue = 1350518400000; // 2012-20-18T00:00:00Z
var date = new Date(timeValue);
alert(date);                   // 2012-10-18T10:00:00UTC+1000

// add a day
date.setDate(date.getDate() + 1); 
alert(date.getTime());         // 1350604800000

從第二個值中減去第一個timeValue,您將獲得86400000,這是一天中的毫秒數(如果該天超過了夏時制更改邊界,則無論哪種方式都將是一個小時)。 使用服務器上的時間值執行所需的操作,將其保留為數字或將其轉換為日期字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM