通过返回的JSON发布日期格式问题

时间:2012-03-15 22:43:38

标签: c# javascript json

出于某种原因,当我在C#中的日期执行ToString(“d”)并且然后在JSON中将其序列化到客户端时,当我尝试将该值呈现给页面时,我得到这个文本文本而不是格式化日期:

/Date(-62135575200000)/

我无法弄清楚这里发生了什么。

3 个答案:

答案 0 :(得分:0)

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

您可以看到有关解码方法的this question

答案 1 :(得分:0)

如果您来回传递日期,则需要转换该值。在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"
        });
    }

答案 2 :(得分:0)

你可以尝试这个 - 它将日期格式化并显示为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();