Метка времени JavaScript от ISO8061 - PullRequest
3 голосов
/ 09 марта 2011

У меня возникла небольшая проблема при получении метки времени от даты iso8061.По какой-то причине он отлично работает в Chrome, но вызывает ошибку неверной даты в Firefox.Точная строка:

var date = new Date(time.replace(/-/g,"/").replace(/[TZ]/g," ")); 

Я пытался передать дату через (в качестве времени переменной) 2011-03-09T16:46:58+00:00, 2011-03-09T16:46:58+0000 и 2011-03-09T16:48:37Z согласно спецификации, изложенной http://www.jibbering.com/faq/#datesно я все еще не могу заставить его работать в Firefox.Фактически, последний метод не работал ни в одном из браузеров.

Если бы кто-нибудь мог помочь мне превратить эту дату iso8061 в метку времени, это было бы здорово.

Спасибо, Анджело Р.

Ответы [ 2 ]

5 голосов
/ 09 марта 2011

взгляните на JavaScript ISO8601 / RFC3339 Анализатор даты :

их код:

Date.prototype.setISO8601 = function(dString){
    var regexp = /(\d\d\d\d)(-)?(\d\d)(-)?(\d\d)(T)?(\d\d)(:)?(\d\d)(:)?(\d\d)(\.\d+)?(Z|([+-])(\d\d)(:)?(\d\d))/;
    if (dString.toString().match(new RegExp(regexp))) {
        var d = dString.match(new RegExp(regexp));
        var offset = 0;
        this.setUTCDate(1);
        this.setUTCFullYear(parseInt(d[1],10));
        this.setUTCMonth(parseInt(d[3],10) - 1);
        this.setUTCDate(parseInt(d[5],10));
        this.setUTCHours(parseInt(d[7],10));
        this.setUTCMinutes(parseInt(d[9],10));
        this.setUTCSeconds(parseInt(d[11],10));
        if (d[12]) {
            this.setUTCMilliseconds(parseFloat(d[12]) * 1000);
        }
        else {
            this.setUTCMilliseconds(0);
        }
        if (d[13] != 'Z') {
            offset = (d[15] * 60) + parseInt(d[17],10);
            offset *= ((d[14] == '-') ? -1 : 1);
            this.setTime(this.getTime() - offset * 60 * 1000);
        }
    }
    else {
        this.setTime(Date.parse(dString));
    }
    return this;
};

и затем вы можете использовать его следующим образом:

var today = new Date();
today.setISO8601('2008-12-19T16:39:57.67Z');

возможно, это не так удобно, но вы можете переписать эту функцию или написать другую, которая будет возвращать дату на основе формата ISO-8601

0 голосов
/ 09 марта 2011

Способ, которым конструктор Date обрабатывает строковые аргументы, отличается в разных браузерах. В качестве первого ответа на этот вопрос указывает, что IE распознает дефисы, а Firefox - нет, как один из примеров.

Вероятно, лучше использовать конструктор, который ожидает отдельные части даты.

...