JSON日期格式mm / dd / yyyy

时间:2010-11-23 18:43:46

标签: jquery json jsonp

以下是我获取的数据:

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格式?

5 个答案:

答案 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)根据需要显示它。

How do I format a Microsoft JSON date?

答案 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)

将序列化的JSON日期自动转换为实际的Javascript日期

由于您正在使用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;  
};'