ajax中的日期格式

时间:2011-12-18 06:42:33

标签: javascript ajax asp.net-mvc asp.net-mvc-3

当服务器和用户具有不同格式时,在ajax,javascript和MVC 3中表示日期格式的最佳方式是什么。如何同步它?

1 个答案:

答案 0 :(得分:3)

当您向客户端发送日期信息作为对AJAX请求的响应时,请确保将其序列化为JSON,因为这是在服务器和客户端之间交换消息的商定格式,并且在JavaScript中运行良好。不幸的是,JSON没有为我们提供格式化日期的任何规则。

在.NET中,您可以使用JavaScriptSerializer类将对象序列化为JSON。如果您决定使用它,它将负责为您序列化DateTime结构。它将做什么在MSDN上有更详细的描述,请参阅:Stand-Alone JSON Serialization

  

当不使用ASP.NET时,DateTime类型在JSON中表示为   具有特殊格式的字符串......

归结为:“\ /日期(700000 + 0500)\ /”

  

DateTime值以JSON字符串的形式显示   “/ Date(700000 + 0500)/”,其中第一个数字(示例中为700000)   ())是GMT时区中的常规毫秒数   (非夏令时)自1970年1月1日午夜起的时间   数字可能是负数来表示更早的时间。那个部分   由示例中的“+0500”组成,是可选的,表示该   时间是本地的 - 也就是说,应该转换为本地   反序列化的时区。如果没有,时间就是   反序列化为Utc。

请注意,正斜杠都是转义的。只有在这种情况下才应将字符串解释为日期。如果没有,它应该被解释为一个字符串,虽然是一个相当奇怪的...

那么我们如何在JavaScript中“反序列化”这个呢?如果没有时区组件,则可以这么简单:

var date = new Date(parseInt(value.substr(6)));
// parseInt will pick up the integer value
// The Date constructor understands the value as milliseconds from 1/1/1970

或者您可以使用eval(被某些人视为“邪恶”)并在值中注入一些JavaScript:

var date = eval("new " + value.slice(1, -1));
// effectively eval("new Date(1234567)")

StackOverflow上有很多关于此的问题:

最后一篇来自微软Betrand Leroy的博客文章解释了.NET的基本原理:

Dates and JSON

所以我的建议是坚持使用.NET默认使用的格式,即使你必须处理时区,你总能找到正确的处理方式。无论你做什么,都不会发明你自己的格式!

PS。从ASP.NET MVC 3开始,您也可以将绑定建模为JSON,因此您也可以将JSON发送到控制器操作。