将“长格式”日期时间字符串转换为javascript日期对象

时间:2013-04-02 00:52:11

标签: javascript json date rfc3339

我有一个当前时间的webservice,它返回一个像这样的JSON对象

{
  "tz": "America\/Chicago", 
  "hour": 15, 
  "datetime": "Mon, 01 Apr 2013 15:46:58 -0500", 
  "second": 58, 
  "error": false, 
  "minute": 46
}

转换长格式日期时间字符串

是否容易?
"datetime": "Mon, 01 Apr 2013 15:46:58 -0500" 

进入javascript Date对象? (除了使用正则表达式来解析字符串)

5 个答案:

答案 0 :(得分:2)

var dt= "Mon, 01 Apr 2013 15:46:58 -050";
var date = new Date(dt);
alert(date.getDay());

答案 1 :(得分:1)

var dat = {
  "tz": "America\/Chicago", 
  "hour": 15, 
  "datetime": "Mon, 01 Apr 2013 15:46:58 -0500", 
  "second": 58, 
  "error": false, 
  "minute": 46
};

var dateObj = new Date(dat.datetime);

Mozilla Developer Network可能会向您显示更多有用的信息。 Date构造函数将为您解析字符串。

答案 2 :(得分:0)

这可能会被低估,但您可能需要考虑使用momentjs进行日期/时间操作。不是一个糟糕的库。

var myDate = moment(myObj.datetime);

现在myDate是一个JavaScript Date对象。

答案 3 :(得分:0)

解析日期字符串的唯一安全方法是自己完成。 ES5为Date.parse定义了一个基于ISO8601的标准字符串,但所有正在使用的浏览器都不支持它,并且您的字符串无论如何都与该格式不一致。

其他字符串值对于一组有限的浏览器“有效”,但这对于Web应用程序来说不是一种可靠的策略。

解析日期字符串非常简单:拆分位,从零件创建日期对象并根据需要应用偏移。因此,如果您的字符串是Mon,2013年4月1日15:46:58 -0500,您可以使用如下函数:

function parseDateString(s) {
  var months = {jan:0,feb:1,mar:2,apr:3,may:4,jun:5,
                jul:6,aug:7,sep:8,oct:9,nov:10,dec:11};
  s = s.split(/[\s:]/);

  var d = new Date(s[3], months[s[2].toLowerCase()], s[1], s[4], s[5], s[6]);
  var sign = s[7]<0? 1 : -1;
  var l = s[7].length;

  // offsetMinutes is minutes to add to time to get UTC
  var offsetMinutes = sign * s[7].substring(l-2,l) + sign * s[7].substring(l-4,l-2) * 60;

  // Add offset and subtract offset of current timezone
  d.setMinutes(d.getMinutes() + offsetMinutes - d.getTimezoneOffset());

  return d;
}

var s = 'Mon, 01 Apr 2013 15:46:58 -0500'
alert(s + '\n' + parseDateString(s));  // Mon, 01 Apr 2013 15:46:58 -0500
                                       // Tue Apr 02 2013 06:46:58 GMT+1000

答案 4 :(得分:0)

/ * 当您需要更加通用的格式时,您可以重写日期字符串 - 获得月份和时区是大部分工作: * /

function rewriteDate(str){
    var months= ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 
    'jul', 'aug', 'sep', 'oct', 'nov', 'dec'],
    dA= str.toLowerCase().split(' '),
    m= months.indexOf(dA[2].substring(0, 3));

    ++m;
    if(m<10) m= '0'+m;
    dA[2]= m;

    var dmy= dA.slice(1, 4).reverse().join('-');

    var t= 'T'+dA[4], L= dA[5].length-2,
    z= dA[5].substring(0, L)+':'+dA[5].substring(L);
    return dmy+t+z;
}

var jsn={
    "datetime":"Mon, 01 Apr 2013 15:46:58 -0500"
};
jsn["datetime"]= rewriteDate(jsn.datetime);
//returns:  (string) "2013-04-01T15:46:58-05:00"


alert(new Date(jsn.datetime).toUTCString());

//  returns: (Date) Mon, 01 Apr 2013 20:46:58 GMT