【问题标题】:Date format issue via returned JSON通过返回的 JSON 的日期格式问题
【发布时间】:2012-03-15 22:43:37
【问题描述】:

由于某种原因,当我在 C# 中对日期执行 ToString("d") 并在 JSON 中将其序列化到客户端时,当我尝试将该值呈现到页面时,我得到这个文字而不是日期格式:

/Date(-62135575200000)/

我不知道这里发生了什么。

【问题讨论】:

标签: c# javascript json


【解决方案1】:

JSON 和 JavaScript 都没有日期文字,因此有各种约定。那是微软的,甚至他们describe 都是“做作的”。

您可以查看this question 了解解码方法。

【讨论】:

    【解决方案2】:

    如果您来回传递日期,则需要转换该值。在javascript中,

    var d = new Date()
    d.setTime(-62135575200000);
    alert(d.toDateString());
    

    在此处查看问题Converting .NET DateTime to JSON 和相关答案。

    下面显示了移动日期的两种注释方式。 在我后面的代码中:

     [WebMethod]
     public static DateTime loadDate()
     {
         return DateTime.Now;
     }
     [WebMethod]
     public static double loadDateTicks()
     {
         return DateTime.Now.UnixTicks();
     }
     public static class ExtensionMethods
     {
        // returns the number of milliseconds since Jan 1, 1970 (useful for converting C# dates to JS dates)
        public static double UnixTicks(this DateTime dt)
        {
            DateTime d1 = new DateTime(1970, 1, 1);
            DateTime d2 = dt.ToUniversalTime();
            TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
            return ts.TotalMilliseconds;
        }
     }
    

    该扩展方法的所有功劳归于“Jeff Meatball Yang”。

    我的前端测试如下:

    function LoadDates() {
            $.ajax({
                url: "Default.aspx/loadDate",
                type: "POST",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                success: function (msg) {
                    var re = /-?\d+/;
                    var d = new Date(parseInt(re.exec(msg.d)[0]));
                    alert(d.toDateString());
                },
                dataType: "json"
            });
            $.ajax({
                url: "Default.aspx/loadDateTicks",
                type: "POST",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                success: function (msg) {
                    var dt = new Date(msg.d);
                    alert(dt.toDateString());
                },
                dataType: "json"
            });
        }
    

    【讨论】:

    • 作为附录,该线程上的评论有一种将日期时间转换为双精度的方法。这是一个有用的约定。我的经验主要是,如果我需要来回发送日期,滴答声效果很好;如果它纯粹是为了显示,字符串有时是最简单/最合适的。
    • 当我能够将其转换为某种格式时,我得到 Sat Dec 31 3938,这显然是不正确的。
    • 您从 .net 发送什么?你用什么来解析它?
    • 我们已经能够使用 ToString("d") 通过 json 发送到 JS 并且它有效,我只是无法让我的工作....不知道为什么。
    • 这不是JS接收代码的问题,其他类型的日期都可以正常工作。
    【解决方案3】:

    您可以试试这个 - 格式化日期并显示为 mm/dd/yyyy 格式。 我遇到了同样的问题,我用这个解决了:

    var regxformatdate = /-?\d+/;
    var integerformat = regxformatdate.exec(msg.d);
    var dt = new Date(parseInt(integerformat));
    var newdate = dt.getMonth()+1+ "/" + dt.getDate()+"/" + dt.getFullYear();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多