У меня есть следующий код:
function parseDate(s) {
var date = new Date(s);
if (!isValidDate(date)) {
//iso 860 date parser, as some browsers do not support this via new Date yet
var re=/(\d\d\d\d)\D?(\d\d)\D?(\d\d)\D?(\d\d)\D?(\d\d\D?(\d\d\.?(\d*))?)(Z|[+-]\d\d?(:\d\d)?)?/;
var a=re(s).slice(1).map(function(x,i){
if (i==6 && x) x=parseInt(x,10)/Math.pow(10,x.length)*1000; // convert to milliseconds
return parseInt(x,10)||0;
});
date = new Date(Date.UTC(a[0],a[1]-1,a[2],a[3]-(a[7]||0),a[4],a[5],a[6]));
}
return date;
};
function isValidDate(d) {
if ( Object.prototype.toString.call(d) !== "[object Date]" )
return false;
return !isNaN(d.getTime());
}
Это работает во всех браузерах, кроме IE6-9. Там я получаю ошибку:
SCRIPT5002: ожидаемая функция
И это указывает на эту строку:
var a=re(s).slice(1).map(function(x,i){
Кто-нибудь знает, что с этим не так и как это исправить?
Спасибо,
Уэсли
Редактировать:
если я изменю код на этот:
function parseDate(s) {
var date = new Date(s);
if (!isValidDate(date)) {
//iso 860 date parser, as some browsers do not support this via new Date yet
var re=/(\d\d\d\d)\D?(\d\d)\D?(\d\d)\D?(\d\d)\D?(\d\d\D?(\d\d\.?(\d*))?)(Z|[+-]\d\d?(:\d\d)?)?/;
var a = re.exec(s);
if (a) {
a = a.slice(1);
a.map(function(x,i){
if (i==6 && x) x=parseInt(x,10)/Math.pow(10,x.length)*1000; // convert to milliseconds
return parseInt(x,10)||0;
});
document.getElementById('test1').innerHTML = (a[0] + ' ' + a[1] + ' ' + a[2] + ' ' + a[3] + ' ' + a[4] + ' ' + a[5] + ' ' + a[6] + ' ' + a[7]);
date = new Date(Date.UTC(a[0],a[1]-1,a[2],a[3]-(a[7]||0),a[4],a[5],a[6]));
}
}
return date;
};
Это все еще не работает (жалуется на .map в IE), но, что интересно, также не работает в сафари (и, возможно, в других браузерах). Есть причина почему?
Вы заметите, что выходные данные (document.write из новой функции:
2008 11 01 20 39: 57,78 57,78 78 -06: 00
Из старой функции:
2008 11 1 20 39 57 780 -6