2017-06-02 78 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]);