2011-06-24 89 views
5

我有以下問題:將.NET DateTime對象的JavaScript Date對象

我從SQL Server檢索DateTime對象和(使用阿賈克斯$)爲Javascript通過JSON傳遞。嘗試將檢索到的對象轉換爲JavaScript中的Date對象時遇到困難。 檢索到的對象是一個值爲「/ Date(615592800000)/」的字符串。我認爲價值是一個時代。

我的問題是,是否有另一種檢索日期對象的方法比使用正則表達式來選擇時期值,然後創建一個新的日期對象?

我是相當新的JS,所以任何幫助,將不勝感激。

回答

6

並不是說我知道...這是我使用,以防萬一功能...

function toDateFromJson(src) { 
    return new Date(parseInt(src.substr(6))); 
} 
+0

Thx。不是我正在尋找的東西,但是這非常簡單和可用。 –

0

這是因爲JSON標準不具有DateTime格式 - 供應商可以隨意將其標記爲他們想要的。 WCF有這種奇怪的格式/ Date()/ 我幾個月前遇到過這種情況。 使用jquery和jquery UI它看起來就像那樣。 controlId是一個元素的標識符

var converted = eval(original.replace(/\/Date\((\d+)\)\//gi, 'new Date($1)')); 
0

正則表達式的方法是完全正確的方法。

var msDateRegex = /"\\\/Date\((-?\d+)\)\\\/"/g; 

var msDateJsonConverter = function(data) { 
    return JSON.parse($.trim(data.replace(msDateRegex, '{"__date":$1}')), function(key, value) { 
     return value && typeof value.__date == "number" ? new Date(value.__date) : value; 
    }); 
}; 

$.ajaxSetup({ converters: { "text json": msDateJsonConverter } }); 

參見:http://weblogs.asp.net/bleroy/archive/2008/01/18/dates-and-json.aspx

0

試試這個。將您獲得的日期字符串傳遞給下面的函數。它會給你JavaScript日期對象。

function (val) { 
     var reISO = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/; 
     var reMsAjax = /^\/Date\((d|-|.*)\)[\/|\\]$/; 


      if (val)) { 
         var a = reISO.exec(val); 
         if (a) { 
          val = new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6])); 
          return val; 
         } 
         a = reMsAjax.exec(val); 
         if (a) { 
          var b = a[1].split(/[-+,.]/); 
          val = new Date(b[0] ? +b[0] : 0 - +b[1]); 
          return val; 
         } 
        } 

     return val; 
    } 
+0

此代碼無效(語法錯誤) – meffect