使用DateTime
JavaScriptSerializer
字段序列化对象后,我看到DateTime
字段如下所示:
EffectiveFrom: "/Date(1355496152000)/"
如何将此字符串转换为Javascript Date对象?
答案 0 :(得分:18)
更新:在所有情况下,此答案可能不合适。请参阅JD's answer以获得更好的解决方案。
您可以在.Net方面“{修复”JavaScriptSerializer
的输出:
JavaScriptSerializer serializer = new JavaScriptSerializer();
var json = serializer.Serialize(this);
json = Regex.Replace(json,@"\""\\/Date\((-?\d+)\)\\/\""","new Date($1)");
return json;
这会改变
EffectiveFrom: "/Date(1355496152000)/"
到
EffectiveFrom: new Date(1355496152000)
Javascript可以直接使用
编辑:更新以适应负面日期
编辑:这是VB人员的正则表达式行:
json = Regex.Replace(json, """\\/Date\((-?\d+)\)\\/""", "new Date($1)")
更新2016.11.20:在javascript / json中有更多日期时间处理在我身后,我建议将正则表达式改为简单的
json = Regex.Replace(json,@"\""\\/Date\((-?\d+)\)\\/\""","$1");
结果值是有效的JSON,可以在javascript端转换为Date对象。
值得注意的是,moment.js(http://momentjs.com/docs/#/parsing/)足够快乐地处理这种格式。
moment("/Date(1198908717056-0700)/");
答案 1 :(得分:10)
有一个答案可以帮到你:
Parsing Date-and-Times from JavaScript to C#
如果要使用javascript将日期时间字符串解析为datetime值,则必须使用“new Date”,如下所示:
var data = new Date("1355496152000");
答案 2 :(得分:8)
var obj = { EffectiveFrom: "/Date(1355496152000)/" };
//parse the Date value and replace the property value with Date object:
var dateValue = parseInt(obj.EffectiveFrom.replace(/\/Date\((\d+)\)\//g, "$1"));
obj.EffectiveFrom = new Date(dateValue);
答案 3 :(得分:8)
这有点像黑客,但上面的内容似乎不太适合我想要实现的目标,因此在对象定义中我进行了序列化,我这样做了:
/// <summary>Date of the record retention event or document date.
/// </summary>
public string DateOfRetentionEvent;
[ScriptIgnore]
public DateTime RetentionEventDate
{
get
{
return _retentionEventDate;
}
set
{
_retentionEventDate = value;
DateOfRetentionEvent = value.ToShortDateString();
}
}
关键是,至少在我的用例中(反序列化永远不会发生),JSON并不关心C#对日期值做了什么。将[ScriptIgnore]
添加到 DateTime 值并为解析器提供替代视图以进行输出应该可以解决问题。它确实在我的情况下:
{
"DateToDispose": "1/1/2020",
"DateOfRetentionEvent": "10/1/2014",
"FullRetentionCode": "NR+5",
"RetentionEvent": "NR",
"RetentionPeriod": 5
}