Pio*_*iak 106 javascript datetime json
我有一段JSON:
\/Date(1293034567877)\/
Run Code Online (Sandbox Code Playgroud)
这是.NET代码的结果:
var obj = DateTime.Now;
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
serializer.Serialize(obj).Dump();
Run Code Online (Sandbox Code Playgroud)
现在我面临的问题是如何在JavaScript中创建一个Date对象.我所能找到的是令人难以置信的正则表达式解决方案(许多包含错误).
很难相信没有优雅的解决方案,因为这完全在JavaScrip中,我的意思是JavaScript代码试图读取JSON(JavaScript Object Notation),这应该是一个JavaScript代码,而且此时它证明它不是因为JavaScript不能在这做得很好
我也看到了一些我无法工作的eval解决方案(除了被指出为安全威胁).
难道没有办法优雅地做到这一点吗?
类似的问题没有真正的答案:
如何使用GWT解析ASP.NET JSON日期格式
小智 120
JSON.parse函数接受可选的DateTime reviver函数.你可以使用这样的函数:
dateTimeReviver = function (key, value) {
    var a;
    if (typeof value === 'string') {
        a = /\/Date\((\d*)\)\//.exec(value);
        if (a) {
            return new Date(+a[1]);
        }
    }
    return value;
}
Run Code Online (Sandbox Code Playgroud)
然后打电话
JSON.parse(somejsonstring, dateTimeReviver);
Run Code Online (Sandbox Code Playgroud)
你的约会对应了
Jac*_*cob 47
日期没有标准的JSON表示.你应该做@jAndy建议的事情而不是序列化一个人DateTime; 只需发送一个RFC 1123日期字符串ToString("r")或一个从Unix开始的纪元数字,或者您可以在JavaScript中使用的其他内容来构建一个Date.
tre*_*ace 46
这个答案来自Roy Tinker:
var date = new Date(parseInt(jsonDate.substr(6)));
Run Code Online (Sandbox Code Playgroud)
正如他所说:substr函数取出"/ Date("部分,而parseInt函数获取整数并忽略最后的")/".生成的数字将传递到Date构造函数中.
另一个选择是在ASP端简单地格式化您的信息,以便JavaScript可以轻松读取它.考虑为您的日期做这件事:
DateTime.Now()
Run Code Online (Sandbox Code Playgroud)
哪个应该返回这样的格式:
7/22/2008 12:11:04 PM
Run Code Online (Sandbox Code Playgroud)
如果你将它传递给这样的JavaScript Date构造函数:
var date = new Date('7/22/2008 12:11:04 PM');
Run Code Online (Sandbox Code Playgroud)
变量date现在保存此值:
Tue Jul 22 2008 12:11:04 GMT-0700 (Pacific Daylight Time)
Run Code Online (Sandbox Code Playgroud)
当然,您可以将此DateTime对象格式化为JS Date构造函数接受的任何类型的字符串/ int .
Lee*_*Gee 19
如果您在JSON中使用JavaScript样式ISO8601日期,则可以从MDN使用此日期
var jsonDate = (new Date()).toJSON();
var backToDate = new Date(jsonDate);
console.log(jsonDate); //2015-10-26T07:46:36.611Z
Run Code Online (Sandbox Code Playgroud)
        有什么不对:
new Date(1293034567877);
Run Code Online (Sandbox Code Playgroud)
这对我来说是"2010年12月22日格林尼治标准时间+格林威治标准时间+格林威治标准时间+格林威治标准时间00:16
或者你需要从json中获取数字吗?
您可以在JavaScript中将JSON日期转换为正常日期格式.
var date = new Date(parseInt(jsonDate.substr(6)));
Run Code Online (Sandbox Code Playgroud)