【问题标题】:Weird Date Format Help奇怪的日期格式帮助
【发布时间】:2010-12-03 04:05:06
【问题描述】:

我创建了一个扩展方法,它使用内置的 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]),但出现“无效日期格式”错误。

【问题讨论】:

  • 这对我来说似乎是一个有效的 JSON 日期......我很困惑为什么这是一个问题?
  • @liho1eye - 我不知道这是一种标准格式,但我找到了解决方法:)
  • 真的吗?在向所有人寻求帮助后,您找到了解决方法,现在您不打算发布如何修复它来帮助其他有同样问题的人?
  • @kyralessa - 我发布了我为解决这个问题而编写的代码。希望这会有所帮助!
  • 谢谢。 (出于我自己的目的,我最终只是将我需要的日期作为字符串返回,所以我不必担心奇怪的 /Date( 东西。)

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


【解决方案1】:

这是一个有效的 Json 日期。看看this other SO question,以帮助您恢复该日期。 How do I format a Microsoft JSON date?

【讨论】:

  • 仅供参考,该链接问题中投票最高的答案是最好的方法,而不是公认的答案。
【解决方案2】:

我使用了日期类型的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'"
};

【讨论】:

  • 投了赞成票,因为它很有用,但我试图避免使用外部库。
【解决方案3】:

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

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

http://www.epochconverter.com/

【讨论】:

    【解决方案4】:

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

    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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多