Javascript, Typecasting необходимо (я думаю) - PullRequest
0 голосов
/ 20 апреля 2011

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

// ****** ### IMPORTANT: The below line returns "2011,3,20" ### *******
var da_expiry_date = localStorage['list_expiry_date']; 

var today_date = new Date();
var future_date = new Date();

future_date.setFullYear(da_expiry_date+2);
alert (future_date+"\n"+today_date);

    if (future_date>today_date) {
        alert("1");
    }
    else {
        alert("2");
    }

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 20 апреля 2011

Если ваш комментарий вверху верен и da_expiry_date возвращает строку, то вам нужно будет ввести ее до даты, прежде чем вы сможете сделать что-либо значимое. Самый простой способ сделать это - воспользоваться одним из перечисленных здесь методов. Проблема с преобразованием строки в дату заключается в знании формата;если у вас есть все отдельные части, вы можете просто использовать один из других конструкторов даты. : D

Как таковой, ваш код пытается взять строку "2011,3,20", добавьтенаберите 2 и задайте его как полный год future_date.Браузер в итоге преобразует 2 в строку и объединяет ее до конца, давая вам "2011,3,202".setFullYear ожидает int вместо строки, поэтому он не может выполнять свою работу.

Возможно, вы захотите, чтобы эта строка была переключена на это после того, как вы правильно конвертировали дату:

future_date.setFullYear(da_expiry_date.getFullYear()+2);
0 голосов
/ 20 апреля 2011

Сначала вам нужно будет проанализировать ее как дату, попробуйте следующее:

var dateFromLocalStorage = function(s) {
  var m = (""+s).match(/^(\d+),(\d+),(\d+)$/);
  return (m) ? new Date(m[1], m[2], m[3]) : null;
};
dateFromLocalStorage("2011,3,20"); // => Wed Apr 20, 2011 ...

Обратите внимание, что конструктор даты принимает месяц как целое число, основанное на нуле, поэтому Jan = 0, Feb = 1,Март = 2 и т. Д.

0 голосов
/ 20 апреля 2011

Я не уверен, что вы пытаетесь с этой строкой:

da_expiry_date+2;

В результате получается:

2011,3,202

... что не является допустимым значениемперейти на setFullYear.Итак, давайте разберем дату:

var da_expiry_date = localStorage['list_expiry_date']; 

function pad(num, n) {
    return ("0" + num).slice(-n);
}

function formatDate(date) {
    var p = date.split(",");
    return [pad(p[0], 4), pad(p[1], 2), pad(p[2], 2)].join("-");
}

var today_date = new Date();
var future_date = new Date(formatDate(da_expiry_date));

alert (future_date+"\n"+today_date);

if (future_date>today_date) {
    alert("1");
} else {
    alert("2");
}

Если вы пытаетесь добавить 2 к году, то сделайте это после того, как разбили дату на ее компоненты:

function formatDate(date) {
    var p = date.split(",");
    p[0] = p[0] * 1 + 2; // add 2 to the year
    return [pad(p[0], 4), pad(p[1], 2), pad(p[2], 2)].join("-");
}

Или, что еще лучше, параметризовать его:

function formatDate(date, n) {
    var p = date.split(",");
    p[0] = p[0] * 1 + n; // add n to the year
    return [pad(p[0], 4), pad(p[1], 2), pad(p[2], 2)].join("-");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...