簡體   English   中英

使用Javascript / JQuery解析自動生成的.NET日期對象

[英]Parsing a Auto-Generated .NET Date Object with Javascript/JQuery

這里有一些帖子,但不是這個具體問題的答案。

服務器返回: "/Date(1304146800000)/"

我想根本不更改服務器端代碼,而是解析.Net生成的JSON對象中包含的日期。 這似乎並不難,因為它看起來幾乎就在那里。 然而,至少在這些論壇中似乎沒有快速解決方案。

從之前的帖子中可以看出這可以使用REGEX完成,但REGEX和我是老對手,在酒吧里冷冷地凝視着對方。

這是唯一的方法嗎? 如果是這樣,有人可以指向我適合此任務的REGEX參考嗎?

問候,

圭多

羅伯特的鏈接很好,但我們應該努力回答這里的問題,而不僅僅是發布鏈接。

這是一個快速的功能,可以滿足您的需求。 http://jsfiddle.net/Aaa6r/

function deserializeDotNetDate(dateStr) {
  var matches = /\/Date\((\d*)\)\//.exec(dateStr);

  if(!matches) {
    return null;
  }

  return new Date( parseInt( matches[1] ) );
}

deserializeDotNetDate("/Date(1304146800000)/");

由於您正在使用jQuery,我已經擴展了它的$.parseJSON()功能,因此它可以自動,透明地為您進行此轉換。

它不僅轉換.net日期,也轉換ISO日期。 所有主流瀏覽器中的原生JSON轉換器都支持ISO日期,但它們只能以一種方式工作,因為JSON規范不支持日期數據類型。

我的博客文章中閱讀所有細節(不想復制博客文章內容,因為它太多了)並獲取代碼。 這個想法仍然是相同的:更改jQuery的默認$.parseJSON()行為,以便它可以檢測.Net和ISO日期,並在解析JSON數據時自動轉換它們。 這樣您就不必遍歷解析的對象並手動轉換日期。

怎么用?

$.parseJSON(yourJSONstring, true);

看到附加變量? 這可以確保所有現有代碼按預期工作而不進行任何更改。 但是,如果您確實提供了附加參數並將其設置為true ,它將檢測日期並相應地轉換它們。

為什么這個解決方案比手動轉換更好? Juan建議

  1. 因為你降低了人為因素忘記轉換對象樹中的某些變量的風險(對象可以是深度和寬度)
  2. 因為您的代碼處於開發階段,並且如果您更改了一些將JSON返回給客戶端的服務器端部件(重命名變量,添加新變量,刪除現有等),您還必須在客戶端考慮這些手動轉換。 如果你自動完成,你不必考慮(或做任何事情)。

我頭頂的兩個主要原因。

當重寫jQuery功能時感覺不對

當您不想實際覆蓋現有的$.parseJSON()功能時,您可以最小化地更改代碼並將擴展名重命名為$.parseJSONwithdates() ,然后在解析JSON時始終使用您自己的函數。 但是,當您將Ajax調用設置為dataType: "json"時,您可能會遇到問題dataType: "json"會自動調用原始解析器。 如果使用此設置,則必須覆蓋jQuery的現有功能。

好處是你不要改變原來的jQuery庫代碼文件。 您將此擴展名放在單獨的文件中,並根據自己的意願使用它。 有些頁面可能會使用它,有些頁面可能不會。 但是在任何地方使用它都是明智的,否則你會遇到同樣的人為因素問題而忘記包含擴展名。 只需將您的擴展名包含在您可能正在使用的某個全局Javascript文件(或母版頁/模板)中。

暫無
暫無

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

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