Javascript, сравнивающий две даты, возвращает NaN - PullRequest
1 голос
/ 06 марта 2012

Я создаю что-то в javascript с помощью Titanium Appcelerator, который сравнивает две даты.

Срок хранения истекает в виде строки свойства.Значение 2012-02-29 05:00:00 +0000 Значение current_date: 2012-03-05 22:49:54 + 0000

Однако, когда я выполняю Date.parse по истечении срока, его результатравно NaN по сравнению с current_date, которое возвращает метку времени unix 1330987794000.

Есть идеи почему?

var current_date = new Date();
var expiration = Ti.App.Properties.getString("expiration");
Ti.API.info(expiration); // returns 2012-02-29 05:00:00 +0000
Ti.API.info(current_date); // returns 2012-03-05 22:49:54 +0000

var check_expiration = Date.parse(expiration);
var check_current_date = Date.parse(current_date);
Ti.API.info(check_expiration); // returns NaN
Ti.API.info(check_current_date); // returns 1330987794000

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Дикий удар в темноте, но current_date является объектом Date, в то время как expiration является String и может быть искажен в соответствии со спецификацией, требуемой для dateString. Смотрите здесь:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse

Вам необходимо убедиться, что строка, возвращенная в expiration, соответствует стандартам.

0 голосов
/ 06 марта 2012

Date.parse() не возвращает экземпляр Date.Вместо этого он возвращает целое число, представляющее количество миллисекунд с начала эпохи.Или, если все, что было передано, не может быть проанализировано, оно вернет NaN.

. В вашем коде current_date является экземпляром Date.Очевидно, что объект даты разбирается как дата.Когда вы выходите из системы, он вызывает toString() для этого объекта даты, чтобы выяснить, как его зарегистрировать.

Но expiration - это не Date, это строка.И JS env платформы, на которой вы работаете, не распознает этот формат строки как разбираемую строку даты.

Я бы предложил вместо этого хранить даты как целые числа.dateObj.getTime() или Date.now() будут возвращать целые числа, которые вы можете сохранить, а затем превращать их обратно в объект реальной даты так же просто, как:

myDate = new Date(parseInt(dateIntegerAsString, 10));

, который будет надежно работать на кроссплатформенных, и, вероятно,намного быстрее, чем более точный анализ даты, который вы здесь собираетесь.

...