我已经看到了许多不同的JSON日期格式标准:
"\"\\/Date(1335205592410)\\/\"" .NET JavaScriptSerializer
"\"\\/Date(1335205592410-0500)\\/\"" .NET DataContractJsonSerializer
"2012-04-23T18:25:43.511Z" JavaScript built-in JSON object
"2012-04-21T18:25:43-05:00" ISO 8601
Run Code Online (Sandbox Code Playgroud)
哪一个是正确的?还是最好的?这有什么标准吗?
可能重复:
如何格式化JSON日期?
我的网站服务正在将一个DateTime返回给jQuery调用.该服务以以下格式返回数据:
/Date(1245398693390)/
Run Code Online (Sandbox Code Playgroud)
如何将其转换为适合JavaScript的日期?
在我的Java Script应用程序中,我将日期存储为如下格式:
2011-09-24
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试使用上面的值来创建一个新的Date对象(所以我可以以不同的格式检索日期)时,日期总会在一天后返回.见下文:
var doo = new Date("2011-09-24");
console.log(doo);
Run Code Online (Sandbox Code Playgroud)
日志:
Fri Sep 23 2011 20:00:00 GMT-0400 (Eastern Daylight Time)
Run Code Online (Sandbox Code Playgroud) 我有一段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日期格式
可能重复:
如何格式化JSON日期?
我从JavaScript的$ getJSON调用得到以下结果.如何在JavaScript中将start属性转换为正确的日期?
[{"id":1,"start":"/ Date(1238540400000)/"},{"id":2,"start":"/ Date(1238626800000)/"}]
谢谢!
可能重复:
格式化Microsoft JSON日期?
ASP.NET函数Json()格式化并返回日期为
{"d":"\/Date(1240718400000)\/"}
Run Code Online (Sandbox Code Playgroud)
必须在客户端处理这是有问题的.您对来回发送日期值的方法有何建议?
我有一个对象,它有一个DateTime属性...我想通过AJAX/JSON将该对象从.ashx处理程序传递回网页...我不想使用第三方控件...
当我这样做:
new JavaScriptSerializer().Serialize(DateTime.Now);
Run Code Online (Sandbox Code Playgroud)
我明白了:
"\/Date(1251385232334)\/"
Run Code Online (Sandbox Code Playgroud)
但我想要"8/26/2009"(没关系本地化......我的应用程序是非常本地化的,所以我的日期格式化假设在这个问题中没有争议).如果我制作/注册自定义转换器
public class DateTimeConverter : JavaScriptConverter
{
public override IEnumerable<Type> SupportedTypes
{
get { return new List<Type>() { typeof(DateTime), typeof(DateTime?) }; }
}
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
Dictionary<string, object> result = new Dictionary<string, object>();
if (obj == null) return result;
result["DateTime"] = ((DateTime)obj).ToShortDateString();
return result;
}
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
if (dictionary.ContainsKey("DateTime"))
return new DateTime(long.Parse(dictionary["DateTime"].ToString()), DateTimeKind.Unspecified);
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我得到这个结果(因为自定义序列化方法的返回值是一个字典):
{"DateTime":"8/27/2009"} …Run Code Online (Sandbox Code Playgroud) 我的json响应看起来像这样:
[{"Id":"dab4580b-e24d-49f8-9fd5-2e968b10d3b5","Title":"MVVM-Sidekick ??","CreatedOn":"\/Date(1390272893353)\/","IsChecked":false},{"Id":"66a0f134-e240-4cc4-96fa-ac3807853ca7","Title":"Windows Phone ????","CreatedOn":"\/Date(1390018447080)\/","IsChecked":false}]
Run Code Online (Sandbox Code Playgroud)
"CreatedOn"日期采用以下格式:'/ Date(1390272893353)/'
当我将此结果绑定到html表时,日期无法格式化:
<td>{{item.CreatedOn | date: 'yyyy-MM-dd HH:mm'}}</td>
Run Code Online (Sandbox Code Playgroud)
仍然给我:
/日期(1390272893353)/
我不想更改服务器端的任何代码(不要修改json字符串),格式化这个日期的最佳方法是什么?
这是我的json:
{
"data": [
{
"comment": "3541",
"datetime": "2016-01-01"
}
]
}
Run Code Online (Sandbox Code Playgroud)
这是模型:
export class Job {
constructor(comment:string, datetime:Date) {
this.comment = comment;
this.datetime = datetime;
}
comment:string;
datetime:Date;
}
Run Code Online (Sandbox Code Playgroud)
查询:
getJobs() {
return this._http.get(jobsUrl)
.map((response:Response) => <Job[]>response.json().data)
}
Run Code Online (Sandbox Code Playgroud)
问题是在铸造之后Job[]我期待datetime属性Date但是它是字符串.它不应该转换为Date对象吗?我在这里失踪了什么?
我相信我在这里遗漏了一些明显的东西.当我从OData服务请求JSON响应时,我得到的DateTime属性的结果与我请求XML时的结果不同.我将使用NerdDinner OData feed作为示例.
JSON:
http://www.nerddinner.com/Services/OData.svc/Dinners(1)?$format=json
"EventDate": "\/Date(1235764800000)\/"
Run Code Online (Sandbox Code Playgroud)
XML:
http://www.nerddinner.com/Services/OData.svc/Dinners(1)
<d:EventDate m:type="Edm.DateTime">2009-02-27T20:00:00</d:EventDate>
Run Code Online (Sandbox Code Playgroud)
当我做警报(新日期(1235764800000))时,我得到这个结果:

当我使用LINQPad运行相同的查询时,我也得到了8PM的结果.为什么JSON结果中的时区不正确?似乎假设响应是GMT.我应该在客户端上处理这个(通过javascript)还是我可以在服务器上设置的东西?
我在客户端上使用jQuery,在服务器上使用WCF数据服务(和实体框架).
更新:
我在客户端使用Datejs来处理UTC日期时间格式.我想知道这是否是解决这个问题的正确方法.
function getDateString(jsonDate) {
if (jsonDate == undefined) {
return "";
}
var utcTime = parseInt(jsonDate.substr(6));
var date = new Date(utcTime);
var minutesOffset = date.getTimezoneOffset();
return date.addMinutes(minutesOffset).toString("M/d/yyyy h:mm tt");
}
Run Code Online (Sandbox Code Playgroud) javascript ×8
json ×8
datetime ×3
date ×2
.net ×1
ajax ×1
angular ×1
angularjs ×1
asp.net-mvc ×1
converter ×1
format ×1
json.net ×1
odata ×1
typescript ×1
wcf ×1