16

DateTime在使用字段序列化对象后JavaScriptSerializer,我看到该DateTime字段如下所示:

EffectiveFrom: "/Date(1355496152000)/"

如何将此字符串转换为 Javascript Date 对象?

4

4 回答 4

20

更新:此答案可能不适用于所有情况。有关可能更好的优雅解决方案,请参阅JD 的答案。

您可以从JavaScriptSerializer.Net 方面“修复”输出:

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)/");
于 2013-11-07T20:37:25.737 回答
12

有一个答案可以帮助你:

将日期和时间从 JavaScript 解析为 C#

如果您想使用 javascript 将日期时间字符串解析为日期时间值,则必须使用“新日期”,如下所示:

var data = new Date("1355496152000");
于 2013-04-23T08:05:17.960 回答
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);
于 2013-04-23T08:17:37.163 回答
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
}
于 2014-10-16T18:32:17.683 回答