【问题标题】:Parsing date in Json Encoded array在 Json 编码数组中解析日期
【发布时间】:2017-02-21 16:56:31
【问题描述】:

我已经建立了一个 MVC 站点,我正在将我的模型传递给视图并尝试在视图中的一些 javascript 中使用它:

var records = @Html.Raw(Json.Encode(Model)); 

我的目标是在接受对象数组作为数据源的自定义日历对象中使用这些记录。但是,数据源希望日期变量知道将约会放在哪里等。我读过Json 没有任何自己的日期格式。因此,从编码返回的所有日期的格式如下:

/Date(1462921200000)/

对象似乎不接受这一点,视图上没有显示任何内容。在我读过的帖子中,他们说您可以将日期解析回正确的格式,但这似乎仅适用于单个值。

我的问题是:有没有一种简单的方法来获取我拥有的编码对象并将日期解析为正确的格式?还是我必须遍历它们才能做到这一点?

谢谢。

【问题讨论】:

标签: javascript json asp.net-mvc datetime


【解决方案1】:

警告:这个答案是固执己见的。 固执己见的部分是:当您需要使用 Json 完成某些事情时,请使用 Json.Net

namespace System.Web.MVC
{
  public static class HtmlHelperJsonExtensions
  {
    public string JsonEncode(this System.Web.MVC.HtmlHelper html, object o)
    {
      var jsonSettings = new Newtonsoft.Json.JsonSerializerSettings()
      {
        // Here you can apply a LOT of formatting, as a small example regarding dates:
        // 1 - formats dates as iso strings (probably what you want)
        DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat,
        // 2 - formats dates with Microsoft format (what you're experiencing)
        //DateFormatHandling = Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat,
        // 3 - formats date in a custom format as for DateTime.ToString(string) overload
        //DateFormatString = "yyyy-MM-dd"
        Formatting = Indented
      };

      var json = Newtonsoft.Json.JsonConvert.SerializeObject(o, jsonSettings);

      return html.Raw(json);
    }
  }
}

用法:

var records = @Html.JsonEncode(Model);

请参阅出色的 Json.Net 文档 here 以获得见解。

【讨论】:

    【解决方案2】:

    Asp.Net MVC 应用程序默认返回 ISO-8601 格式的日期。 您可以使用如下函数在客户端转换值:

    function ConvertDate(dateString) {
        return new Date(parseInt(dateString.replace("/Date(", "").replace(")/", ""), 10));
      }
    

    或者你可以使用像momentjs(https://momentjs.com/docs/#/parsing/asp-net-json-date/)这样的库:

    moment("/Date(1198908717056-0700)/"); // 2007-12-28T23:11:57.056-07:00
    

    【讨论】:

      【解决方案3】:

      免责声明:当我撰写此答案时,问题未被识别为 ASP.NET。我认为 OP 正在要求他尚未公开的框架提供的某些功能。我保留答案是因为我认为它对 vanilla JavaScript 中的手动解码有效。


      格式可以用简单的正则表达式解析

      var asText = "Date(1462921200000)";
      var asDate = null;
      var parsed = asText.match(/^Date\((\d+)\)$/);
      if (parsed!==null) {
      	asDate = new Date(+parsed[1]);
      }
      console.log(asDate);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-31
        • 2019-10-23
        • 1970-01-01
        • 1970-01-01
        • 2012-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多