解析日期字符串的唯一安全方法是自己进行。ES5 为 Date.parse 定义了一个基于 ISO8601 的标准字符串,但并非所有正在使用的浏览器都支持它,并且您的字符串无论如何都与该格式不一致。
其他字符串值适用于有限的浏览器集,但这对于 Web 应用程序来说不是可靠的策略。
解析日期字符串相当简单:拆分位,从各个部分创建一个日期对象,并在需要时应用偏移量。因此,如果您的字符串是 Mon, 01 Apr 2013 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