2017-06-02 79 views
0

這可能是一個可能的重複,但我發佈後,搜索了很多,並嘗試各種方法。Json日期到C#MVC日期

我將模型作爲jsonResult傳遞給ajax成功,並將該值綁定到控件。在我的模型中,我有一個datetime屬性,它可以獲取適當的日期值,但在我的ajax成功中,它會被轉換爲'/ Date(1493749800000)/'。

現在,當我想在我的MVC模型的Datetime屬性中使用Datetime值作爲更多功能時,它將變爲null。

請建議一種方法,我可以處理這種情況。

事情我想: Date.Parse(),JSON.parse()來,與string.replace()

+0

是的1493749800000被從瀏覽器發送到服務器(即由JS生成)還是從服務器發送到瀏覽器(即由C#生成)? – mjwills

+0

請參閱[this](https://stackoverflow.com/a/726869/2534646),[this](https://stackoverflow.com/a/42662967/2534646)回答它會幫助你 – Curiousdev

+0

arent that ticks ? – pitersmx

回答

0

恕我直言,它始終是最好做後端時戳日期的工作 - 前臺的通信。這樣可以減少轉換問題的機會。在這裏,你有兩個功能,使這項工作從您的API:

 public static DateTime UnixTimeStampToDateTime(double unixTimeStamp) 
     { 
      System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc); 
      dtDateTime = dtDateTime.AddSeconds(unixTimeStamp).ToLocalTime(); 
      return dtDateTime; 
     } 

     public static long DateTimeToUnixTimeStamp(DateTime value) 
     { 
      long epoch = (value.ToUniversalTime().Ticks - 621355968000000000)/10000000; 
      return epoch; 
     } 
0

這是我在以前的項目, 之一是如何做到我假設你有你的所有數據,包括日期在阿賈克斯的成功方法。 現在,

success: function(data) 
{ 
    var jsonDate = data.myDateField; 
    var value = new Date(parseInt(jsonDate.toString().substr(6))); 
    var finalResult = value.getMonth() + 1 + "/" + value.getDate() + "/" + 
        value.getFullYear(); 
} 

因此,finalResult是您期望的日期。現在,您可以簡單地在HTML中渲染它。

欲瞭解更多信息,你可以訪問偉大的Hanselman寫的this blog

Bellow是片段,將您的日期從服務器發出。只要運行它。 And dont confuse與字符串/Date(1493749800000)/finalResult。我的意思是轉換後的日期。因爲這是您保存在數據庫中的實際日期。

var jsonDate = "/Date(1493749800000)/"; 
 
var value = new Date(parseInt(jsonDate.toString().substr(6))); 
 
var finalResult = value.getMonth() + 1 + "/" + value.getDate() + "/" + 
 
        value.getFullYear(); 
 
console.log(finalResult); 
 
//alert(finalResult);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

希望它能幫助。乾杯! :)

+0

jsonDate.substr(6)這給了我錯誤 –

+0

那就是錯誤: VM922:2未捕獲TypeError:jsonDate.substr不是函數 –

+0

檢查我上面更新的答案。它工作正常。你需要在那裏添加toString()。即使我不使用toString(),它仍然工作正常。乾杯 –

0

我認爲你可以使用下面一行的deserealize您serealize日期是這樣的:JsonConvert.DeserializeObject<DateTime>(yourDate);

您也可以deserealize您可以通過以下方式進行建模:

JsonConvert.DeserializeObject<YouModel>(JsonModelData);

+0

隨着日期時間我也有其他屬性也通過我的模型 –

+0

@AdityaPewekar,請看我更新的答案! –

0
var input = '/Date(464560200000)/' 
var a = /\/Date\((\d*)\)\//.exec(input); 
var d = new Date(+a[1]);