以下是我获取的数据:
jsonp1290537545248([{“Active”:true,“EndDate”:“\ / Date(-62135578800000-0500)\ /”,“StartDate”:“\ / Date(1280635200000-0400)\ /”}]) ;
$.getJSON(url, {},
function (data) {
alert(data[0].EndDate);
alert(Date(data[0].StartDate));
//alert(data[0].StartDate.getDate());// + "/" + (data[0].StartDate.getMonth() + 1) + "/" + data[0].StartDate.getFullYear()); // alerts: "15/10/2008"
//var date = eval(jsonDate.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"));
alert('dd ' + new Date(parseInt(data.substr(6))));
});
我如何获得MM / DD / YYYY格式?
答案 0 :(得分:5)
我会使用与Zain发布的类似的正则表达式,但不要像demo那样使用eval()
:
var start = parseInt(data.StartDate.replace(/\/Date\((.*?)[+-]\d+\)\//i,"$1"), 10),
date = new Date( start ),
fStart = date.getMonth()+1 + '/' + date.getDate() + '/' + date.getFullYear();
结束日期是什么时候?它似乎没有什么区别,如果你用这个数字作为新的日期,你最终会得到“Sun Dec 31 0000 22:59:59 GMT-0600(中央标准时间)”......所以我不是确定如何处理这个价值。
答案 1 :(得分:4)
这可能会有所帮助。请参阅http://jsfiddle.net/zainshaikh/pysAR/上的演示。
var date = eval(data[0].StartDate.replace(/\/Date\((.*?)\)\//gi, "new Date($1)"));
然后您可以使用JavaScript Date Format脚本(缩小和压缩时为1.2 KB)根据需要显示它。
答案 2 :(得分:4)
在确定哪个日期时,有必要考虑时区。我假设日期的第一部分是来自Date.getTime()
的Java或JavaScript的输出(即自1970年1月1日,00:00:00 UTC以来的毫秒数)。 / p>
对于日期中所有时间的正确输出,必须在创建Date对象之前应用时区偏移量(例如 -0500
用于东部标准时间),然后使用UTC方法获取部分日期。原因是JavaScript没有提供Date.setTimezoneOffset()
方法来将时区设置为正确的时区(无法从访问者的系统时区更改它)。
这是我提出的代码。它使用正则表达式提取编码日期的部分,应用指定的时区偏移量,创建Date对象,然后从部件构建日期(演示:http://jsfiddle.net/Wa8LY/1/)。
var dateParts = data[0].StartDate.match(/\((.*)([+-])(..)(..)\)/);
var dateObj = new Date(
/* timestamp in milliseconds */ Number(dateParts[1]) +
/* sign of timezone offset */ Number(dateParts[2] + '1') *
/* hours and minutes offset */ (36e5 * dateParts[3] + 6e4 * dateParts[4])
);
var dateMMDDYYYY = [dateObj.getUTCMonth() + 1,
dateObj.getUTCDate(),
dateObj.getUTCFullYear()].join('/');
如果您需要左键填充日期的组成部分(例如 01/01/0001
),您可以使用此功能来帮助完成此操作:
function leftPadWithZeroes(str, len) {
return (new Array(len + 1).join('0') + str).slice(-len);
}
并将最后一行更改为(demo:http://jsfiddle.net/5tkpV/1/):
var dateMMDDYYYY = [leftPadWithZeroes(dateObj.getUTCMonth() + 1, 2),
leftPadWithZeroes(dateObj.getUTCDate(), 2),
leftPadWithZeroes(dateObj.getUTCFullYear(), 4)].join('/');
答案 3 :(得分:2)
由于您正在使用jQuery,您可能会对我编写的代码感兴趣,该代码会自动将序列化日期转换为实际的Javascript日期。
您的代码仍将在客户端上使用$.parseJSON()
,但使用第二个参数,您可以告诉它自动转换日期。现有代码仍然有效,因为扩展功能仅根据您的需求解析日期。
检查blog post并自行查找。它是可重用的,并且可以在全球范围内工作,因此您可以忘记这个手动日期转换。
答案 4 :(得分:0)
以下情况有效,因为我的日期字符串是“/ Date(1334514600000)\”
'function ConvertJsonDateString(jsonDate) {
var shortDate = null;
if (jsonDate) {
var regex = /-?\d+/;
var matches = regex.exec(jsonDate);
var dt = new Date(parseInt(matches[0]));
var month = dt.getMonth() + 1;
var monthString = month > 9 ? month : '0' + month;
var day = dt.getDate();
var dayString = day > 9 ? day : '0' + day;
var year = dt.getFullYear();
shortDate = monthString + '/' + dayString + '/' + year;
}
return shortDate;
};'