Даты не сравниваются правильно в Titanium Mobile - PullRequest
0 голосов
/ 18 сентября 2011

Возьмите следующий код:

var first = new Date("2011-09-17T15:12:04.331Z");
var second = new Date("2011-09-17T19:55:19.269Z");
alert(first < second);

В браузере (http://jsfiddle.net/fdqjs/0/), он сообщает об истинном. В Titanium Mobile он сообщает 0 или ложный. Почему это так? Я не могу получитьдаты в другом формате из источника.

1 Ответ

1 голос
/ 18 сентября 2011

Я предполагаю, что на Titanium Mobile не запущена достаточно новая версия Javascript для покрытия используемого вами формата даты.

Если вы посмотрите спецификацию для объекта Date, потребуется датакак определено в RFC 1123 , который получает определение даты от RFC 822 , который не выглядит для меня так, как будто он поддерживает точный формат, который вы используете.Начиная с Javascript 1.8.5, он также принимает даты в виде ISO 8601 , который выглядит так, как будто он может охватывать то, что у вас есть.

Я бы посоветовал изменить ваши строки дат так, чтобы они работали как более старая спецификация, если можете.См. здесь в MDN для получения дополнительной информации.

Пример действительного времени даты RFC822:

02 Oct 2002 15:00:00 +0200

Если ваши даты всегда в том формате, в котором выпокажите в своем вопросе, тогда вы можете сделать простое преобразование, как это:

function ConvertDate(dateIn) {
    var monthStr = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
    // desired format "02 Oct 2002 15:00:00 +0200"
    var dateOut = dateIn;
    var matches = dateIn.match(/(\d+)\D+(\d+)\D+(\d+)T(.*)Z$/);
    if (matches) {
        dateOut = matches[3] + " " + 
            monthStr[parseInt(matches[2] - 1, 10)] + " " + 
            matches[1] + " " + 
            matches[4] + " GMT";
    }
    return(dateOut);
}

Демо здесь: http://jsfiddle.net/jfriend00/APxN7/.

Примечание: эта простая функция предполагает, что ваши даты всегда в точном форматевы показываете в своем вопросе и всегда действительны, так как он не будет обрабатывать произвольную дату ISO 8601 в качестве входных данных, а только ту форму, которую вы показываете.

Чтобы получить текущую дату в объекте javascript, вы можете просто сделать это:

var now = Date();

Затем можно использовать любой из методов, определенных для объекта Date для объекта now, включая методы для получения любой части даты или преобразования ее в строкуи т. д ....

Чтобы получить интернет-форму даты, которую выводит ConvertDate, вы должны использовать:

now.toUTCString();
...