奇怪的日期格式帮助

时间:2010-12-03 04:05:07

标签: javascript asp.net json serialization date-format

我创建了一个扩展方法,它使用内置的ASP.NET序列化程序将我的对象序列化为JSON,以便通过AJAX发送回我的服务器,如下所示:

namespace ExtensionMethods.Json
{
public static class JsonHelper
{
    public static string ToJson(this object obj)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        return serializer.Serialize(obj);
    }

    public static string ToJson(this object obj, int recursionDepth)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        serializer.RecursionLimit = recursionDepth;
        return serializer.Serialize(obj);
    }
}
}

//usage
String json = myObject.ToJson();

除了日期之外,这样可以正常工作,因为它以这种格式发回日期:

/Date(1291276800000)/

有没有办法修复这个服务器端,以便日期变得更容易管理,或者必须在客户端进行一些愚蠢的字符解析(即,从数据中删除数字并尝试设置日期使用该数字作为毫秒)?还是有一种更好的方式我只是俯视?我已经尝试了Date.parse([the date]),但错误的是“日期格式无效”。

4 个答案:

答案 0 :(得分:3)

这是一个有效的Json日期。看看这个其他的SO问题,以帮助您获得该日期。 How do I format a Microsoft JSON date?

答案 1 :(得分:1)

我使用了Date类型的JavaScript Date Format日期格式扩展名。它与JSON格式的日期配合得很好。

我包含.js文件并将我的日期格式化为:

function formatJsonDate(jsonDate, formatString) {
    var dt = new Date(+jsonDate.replace(/\/Date\((\d+)\)\//, '$1'));
    return dt.format(formatString);
}

var formattedDate = formatJsonDate(jsonDate, "mm/dd/yyyy");

甚至还有一些预定义的日期格式掩码,例如:

// Some common format strings
dateFormat.masks = {
    "default":      "ddd mmm dd yyyy HH:MM:ss",
    shortDate:      "m/d/yy",
    mediumDate:     "mmm d, yyyy",
    longDate:       "mmmm d, yyyy",
    fullDate:       "dddd, mmmm d, yyyy",
    shortTime:      "h:MM TT",
    mediumTime:     "h:MM:ss TT",
    longTime:       "h:MM:ss TT Z",
    isoDate:        "yyyy-mm-dd",
    isoTime:        "HH:MM:ss",
    isoDateTime:    "yyyy-mm-dd'T'HH:MM:ss",
    isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};

答案 2 :(得分:0)

我也遇到了这个问题,并决定将所有日期对象移到Unix时间戳并将其解析回来。这是额外的工作,但它保留了有趣的格式。如果你有一个long数据类型的类变量,它应该很好地保存一个时间戳。

这里有一些非常可靠的样品。

http://www.epochconverter.com/

答案 3 :(得分:0)

对于这个答案,这基本上就是我使用的:

function parseJsonDate (date, shortFormat) {
    if (date != null) {
        var d = new Date(parseInt(date.substr(6)));
            if (shortFormat) {
                return (d.getMonth() + 1) + '/' + d.getDate() + '/' +
                          d.getFullYear().toString().substr(2);
            }
            return d;
    } else {
            return null;
    }
}