【发布时间】:2012-03-15 22:43:37
【问题描述】:
由于某种原因,当我在 C# 中对日期执行 ToString("d") 并在 JSON 中将其序列化到客户端时,当我尝试将该值呈现到页面时,我得到这个文字而不是日期格式:
/Date(-62135575200000)/
我不知道这里发生了什么。
【问题讨论】:
标签: c# javascript json
由于某种原因,当我在 C# 中对日期执行 ToString("d") 并在 JSON 中将其序列化到客户端时,当我尝试将该值呈现到页面时,我得到这个文字而不是日期格式:
/Date(-62135575200000)/
我不知道这里发生了什么。
【问题讨论】:
标签: c# javascript json
JSON 和 JavaScript 都没有日期文字,因此有各种约定。那是微软的,甚至他们describe 都是“做作的”。
您可以查看this question 了解解码方法。
【讨论】:
如果您来回传递日期,则需要转换该值。在javascript中,
var d = new Date()
d.setTime(-62135575200000);
alert(d.toDateString());
在此处查看问题Converting .NET DateTime to JSON 和相关答案。
下面显示了移动日期的两种注释方式。 在我后面的代码中:
[WebMethod]
public static DateTime loadDate()
{
return DateTime.Now;
}
[WebMethod]
public static double loadDateTicks()
{
return DateTime.Now.UnixTicks();
}
public static class ExtensionMethods
{
// returns the number of milliseconds since Jan 1, 1970 (useful for converting C# dates to JS dates)
public static double UnixTicks(this DateTime dt)
{
DateTime d1 = new DateTime(1970, 1, 1);
DateTime d2 = dt.ToUniversalTime();
TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
return ts.TotalMilliseconds;
}
}
该扩展方法的所有功劳归于“Jeff Meatball Yang”。
我的前端测试如下:
function LoadDates() {
$.ajax({
url: "Default.aspx/loadDate",
type: "POST",
data: "{}",
contentType: "application/json; charset=utf-8",
success: function (msg) {
var re = /-?\d+/;
var d = new Date(parseInt(re.exec(msg.d)[0]));
alert(d.toDateString());
},
dataType: "json"
});
$.ajax({
url: "Default.aspx/loadDateTicks",
type: "POST",
data: "{}",
contentType: "application/json; charset=utf-8",
success: function (msg) {
var dt = new Date(msg.d);
alert(dt.toDateString());
},
dataType: "json"
});
}
【讨论】:
您可以试试这个 - 格式化日期并显示为 mm/dd/yyyy 格式。 我遇到了同样的问题,我用这个解决了:
var regxformatdate = /-?\d+/;
var integerformat = regxformatdate.exec(msg.d);
var dt = new Date(parseInt(integerformat));
var newdate = dt.getMonth()+1+ "/" + dt.getDate()+"/" + dt.getFullYear();
【讨论】: