【问题标题】:Json Date to C# MVC dateJson 日期到 C# MVC 日期
【发布时间】:2017-06-02 13:48:27
【问题描述】:

这可能是重复的,但我在搜索了很多并尝试了各种方法后发布了这个。

我在 ajax 成功中将模型作为 JsonResult 传递并将值绑定到控件。在我的模型中,我有一个 datetime 属性,它获得了正确的日期值,但在我的 ajax 成功中,它被转换为类似 '/Date(1493749800000)/' 的东西。

现在,当我想在我的 MVC 模型的 Datetime 属性中将 Datetime 值用于进一步的功能时,它会变为 null。

请建议我可以处理这种情况的方法。

我尝试过的事情: Date.Parse(), Json.Parse(), string.Replace()

【问题讨论】:

标签: c# json ajax asp.net-mvc datetime


【解决方案1】:

恕我直言,在进行后端 - 前端通信时使用时间戳日期总是更好。这样,您就可以减少遇到转换问题的机会。在这里,您有两个函数可以通过您的 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;
        }

【讨论】:

    【解决方案2】:

    我认为您可以使用下面的行来取消您的 serealize 日期,如下所示:JsonConvert.DeserializeObject<DateTime>(yourDate);

    你也可以通过以下方式去实现你的模型:

    JsonConvert.DeserializeObject<YouModel>(JsonModelData);

    【讨论】:

    • 除了日期时间之外,我的模型中还传递了其他属性
    【解决方案3】:

    这就是我在之前的一个项目中所做的, 我假设您在 ajax 成功方法中获得了所有数据,包括日期。 现在,

    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 中呈现它,非常简单。

    有关更多信息,您可以访问this blog,作者是伟大的 Hanselman。

    Bellow 是 sn-p,从服务器获取您的日期。运行它。 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>

    希望对您有所帮助。干杯! :)

    【讨论】:

    • 就是错误:VM922:2 Uncaught TypeError: jsonDate.substr is not a function
    • 检查我上面的更新答案。它工作正常。您需要在此处添加 toString() 。即使我不使用 toString() 仍然可以正常工作。干杯
    • @AdityaPewekar 查看我上面的答案。通过获取来自服务器的日期添加了一个 sn-p。如果您在 substr 中遇到错误,请使用 substring() 方法进行检查。干杯!如果它解决了你的问题,别忘了标记为答案:)
    【解决方案4】:
    var input = '/Date(464560200000)/'
    var a = /\/Date\((\d*)\)\//.exec(input);
    var d = new Date(+a[1]);
    

    【讨论】:

      猜你喜欢
      • 2012-06-07
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多