当服务器和用户具有不同格式时,在ajax,javascript和MVC 3中表示日期格式的最佳方式是什么。如何同步它?
答案 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的基本原理:
所以我的建议是坚持使用.NET默认使用的格式,即使你必须处理时区,你总能找到正确的处理方式。无论你做什么,都不会发明你自己的格式!
PS。从ASP.NET MVC 3开始,您也可以将绑定建模为JSON,因此您也可以将JSON发送到控制器操作。