我目前的转换方法如下:
function FormatDate(date, fmt) {
var d = date;
if (!d) return "";
if ((Object.prototype.toString.call(d).match(/object\s(\w+)/)[1]).toLowerCase() != "date") {
d = d.toString();
var reg = /(Date\(\d+\))/ig;
eval($.format("d = new {0};", d.match(reg)));
}
fmt = (fmt == null) ? "MM/dd/yyyy hh:mm:ss" : fmt;
return fmt.replace("yyyy", PadStr(d.getFullYear(), 4, "0"))
.replace("MM", PadStr(d.getMonth() + 1, 2, "0"))
.replace("yy", PadStr(d.getYear() + 1, 2, "0"))
.replace("dd", PadStr(d.getDate(), 2, "0"))
.replace("hh", PadStr(d.getHours(), 2, "0"))
.replace("mm", PadStr(d.getMinutes(), 2, "0"))
.replace("ss", PadStr(d.getSeconds(), 2, "0"))
.replace("{", "")
.replace("}", "");
}
我想将/ Date(-23788800000)/转换为像'1969/04/01'这样的字符串, 谁能给我一些建议?
答案 0 :(得分:0)
让我们考虑使用JSON序列化返回日期的ASP.NET控制器操作:
public ActionResult GetDate()
{
return Json(DateTime.Now, JsonRequestBehavior.AllowGet);
}
正如您所知,JSON序列化将返回一个字符串,如:"\/Date(1398106878581)\/"
。
给出的数字是以毫秒为单位的日期。在JavaScript中解析它的一种简单方法是var milliseconds = +json.match(/\d+/);
。你可以把它扔进一个Date构造函数然后离开。
这是完整的JS代码,它将使用我们上面写的GetDate()
动作:
var xmlHttp = null;
xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
formatDate(xmlHttp.responseText);
}
}
xmlHttp.open('GET', '/Home/GetDate', true);
xmlHttp.send(null);
var formatDate = function(json) {
var milliseconds = +json.match(/\d+/);
var date = new Date(milliseconds);
var fmt = "MM/dd/yyyy hh:mm:ss";
var formatted = fmt.replace("yyyy", date.getFullYear())
.replace("MM", date.getMonth() + 1)
.replace("yy", date.getYear() + 1)
.replace("dd", date.getDate())
.replace("hh", date.getHours())
.replace("mm", date.getMinutes())
.replace("ss", date.getSeconds())
.replace("{", "")
.replace("}", "");
return formatted;
}