Расчет даты и времени в JavaScript не работает 8 и 9 числа любого месяца - PullRequest
3 голосов
/ 26 августа 2011

У меня есть следующий JavaScript: http://jsfiddle.net/5Hapw/

При выборе даты переменная будет предупреждать о отметке времени - однако 8 и 9 числа каждого месяца отметка времени всегда неверна.

Кто-нибудь может увидеть, где я ошибся?

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

Ответы [ 5 ]

4 голосов
/ 26 августа 2011

Ваша проблема в разборе строки на число.Если вы не задаете основание, а строка начинается с нуля, она будет проанализирована как восьмеричное число:

parseInt("017") === 15

parseInt("08") === 0 // because 8 is not a valid digit in octal numbers

Решение состоит в том, чтобы указать основание 10:

parseInt("08", 10) === 8

Обновленная скрипка: http://jsfiddle.net/Guffa/5Hapw/6/

2 голосов
/ 26 августа 2011

Если вы не передадите второй параметр в parseInt (базовый), javascript будет догадываться об этом. Наверное, это неправильно. Передавайте 10 в качестве второго параметра для всех ваших вызовов parseInt (вы можете избавиться от кода, который усекает ноль от месяца - случайное добавление этого кода для обрезания ноля от дня месяца также будет работать)

Обновленная скрипка: http://jsfiddle.net/5Hapw/4/

1 голос
/ 26 августа 2011

Эту проблему можно решить в вашем случае, приведя ее к числу - замените parseInt(selection[0]) на Number(selection[0]).

http://jsfiddle.net/mblase75/5Hapw/5/

0 голосов
/ 26 августа 2011

Я не знаю, почему вы пытаетесь разобрать параметр date (путем разделения)? Параметр inst содержит следующие поля:

  • inst.selectedDay
  • inst.selectedMonth
  • inst.selectedYear
  • и более ...

    Date.UTC (inst.selectedYear, inst.selectedMonth, inst.selectedDay);

0 голосов
/ 26 августа 2011

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

parseInt(month_val);

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

    var birthdate = element.value.split("-");
    var JDate = new Date(parseInt(birthdate[2],10), parseInt(birthdate[0],10) -1, parseInt(birthdate[1],10));
    valid = (parseInt(birthdate[0],10) - 1 == JDate.getMonth() && parseInt(birthdate[1],10) == JDate.getDate() && parseInt(birthdate[2],10) == JDate.getFullYear());
    return valid;
...