2009-08-12 75 views

回答

0

看看博文jQuery, Ajax, ASP.NET and dates

它詳細說明如何使用ASP.NET MVC和jQuery在服務器和客戶端之間通過JSON傳遞日期。

+0

這提供了一些見解,但是處理w/jQuery到ASP.NET Web服務,而不是通過Json()返回JsonResult的MVC控制器。我感興趣的是jQuery到ASP.NET MVC w/o MSFT ajax。 – ChrisP 2009-08-12 01:08:41

+0

問題主要在於具有日期屬性而非單個日期值的複雜對象。 – ChrisP 2009-08-12 01:10:46

+0

JSON格式與示例中的描述完全相同。日期屬性或單個日期值沒有區別。 – Alex 2009-08-12 01:13:44

11

如果您不綁定到MS JSON序列化程序,則可以使用Json.NET。它帶有一個IsoDateTimeConverter來處理序列化日期問題。這會將日期序列化爲ISO 8601格式化的字符串。

例如,在我們的項目序列化myObject通過以下代碼處理。

JsonNetResult jsonNetResult = new JsonNetResult(); 
jsonNetResult.Formatting = Formatting.Indented; 
jsonNetResult.SerializerSettings.Converters.Add(new IsoDateTimeConverter()); 
jsonNetResult.Data = myObject; 

如果你決定採取Json.NET急跌你也想抓住JsonNetResult因爲它返回一個可以在ASP.NET MVC應用程序中使用一個ActionResult。這很容易使用。

欲瞭解更多信息,請參閱:Good (Date)Times with Json.NET

+0

不知道我們怎麼錯過了,謝謝 – Marc 2009-08-12 01:39:14

6

這可能是醜陋,但它的工作原理:

var epoch = (new RegExp('/Date\\((-?[0-9]+)\\)/')).exec(d); 
$("#field").text((new Date(parseInt(epoch[1]))).toDateString()); 

也許,這是沒有必要的整個字符串匹配,並且只( - [0-? 9] +)就足夠了......

1

玩過Json.NET庫之後,我在想爲什麼要選擇在JavaScriptDateTimeConverter上使用IsoDateTimeConverter。

我發現這更容易與Ext JS接口一起使用,這些接口是在從MVC控制器序列化日期時使用的。

JsonNetResult jsonNetResult = new JsonNetResult(); 
jsonNetResult.Formatting = Formatting.Indented; 
jsonNetResult.SerializerSettings.Converters.Add(new JavaScriptDateTimeConverter()); 
jsonNetResult.Data = myObject; 

我得到這個數據回的Ext.data.JsonStore的實踐例子,它能夠獲取返回的值作爲一個日期有沒有我指定的日期格式解析。

 store:new Ext.data.JsonStore({ 
      url: pathContext + '/Subject.mvc/Notices', 
      baseParams: { subjectId: this.subjectId }, 
      fields: [ 
       {name: 'Title'}, 
       {name: 'DateCreated', type: 'date' } 
      ] 
     }), 

的JSON返回看起來是這樣的:

[{"Title":"Some title","DateCreated":new Date(1259175818323)}] 

沒有任何理由要轉換爲ISO 8601的格式和回來,如果你沒有到。

+0

因爲'JavaScriptDateTimeConverter' [不生成有效的JSON](http://james.newtonking.com/json/help/?topic=html/DatesInJSON.htm)。如果您希望與期望有效JSON的更廣泛客戶保持互操作性,那麼您最好堅持使用ISO 8601。 – 2013-11-18 01:00:57

29

這在another post發現堆棧 溢出:

var date = new Date(parseInt(jsonDate.substr(6))); 

SUBSTR函數取出「/日期(」部分,而parseInt函數函數獲取整數,而忽略了「)/」在結束。生成的數字被傳入Date構造函數。

+0

最簡單的解決方案是最好的 – DalSoft 2012-02-18 13:12:13

1

自動轉換日期在客戶端上(如果你使用jQuery)

-

你沒有指定,但因爲你是使用ASP.NET MVC你可以使用jQuery。如果你這樣做,如果你使用this blog post提供的代碼,轉換爲實際日期變得更簡單。該代碼擴展了jQuery的$.parseJSON()功能,因此它會自動將ISO和ASP.NET日期字符串轉換爲實際的JavaScript日期。

我在ASP.NET MVC中使用它,它的作用就像一個魅力。最好的部分是它也是向後兼容的。使用$.parseJSON()的現有代碼將像以前一樣工作(實際上工作原理相同),但如果您提供第二個參數並將其值設置爲true,則所有日期都會自動轉換爲您。

該擴展在適用的地方使用本機瀏覽器JSON支持,也適用於其他情況。無論如何,現代瀏覽器都支持這個功能。