Вычитание даты из поля ввода - PullRequest
1 голос
/ 24 февраля 2011

Я бы хотел, чтобы поле ввода имело кнопку рядом с ним.

В поле ввода я введу такую ​​дату: 2011-07-08

И когда я нажимаю кнопку, она должна прочитать время, введенное в поле ввода, и вычесть его с 3 месяцами и одним днем.

Возможно ли это?

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

Ответы [ 4 ]

1 голос
/ 24 февраля 2011

Да.Сначала вы читаете дату и конвертируете в объект даты

var dateString = document.getElementById('id of your field').value,
    date = new Date(dateString);

, затем вычитаете 91 день и выводите результат

date.setDate(date.getDate() - 91);
alert(date.toString());

Здесь для простоты я предполагаю, что вы действительно хотите 91 деньа не 3 месяца а один день.Если вы хотите три месяца и один день, вы будете делать

date.setMonth(date.getMonth() - 3);
date.setDate(date.getDate() - 1);
alert(date.toString());

Объект Date позаботится о переполнениях, високосных годах и прочем.

Если вы хотите записать его в то же полезаботясь о нолях, вы можете сделать

function assureTwoDigits(number) {
    if (number > 9) {
        return '-' + number;
    }
    else {
        return '-0' + number;
    }
}

и изменить последнюю строку на

document.getElementById('id of your field').value = date.getFullYear() + assureToDigits(date.getMonth()) + assureTwoDigits(date.getDate());
0 голосов
/ 24 февраля 2011

Да, это возможно, и это наиболее чисто, если вы можете сделать это без какой-либо тайной магии регулярных выражений.Начните с преобразования даты в объект Date:

// this will get you a date object from the string:
var myDate = new Date("2011-07-08");

// subtract 3 months and 1 day
myDate.setMonth(myDate.getMonth()-3);
myDate.setDay(myDate.getMonth(), myDate.getDay()-1);

// And now you have the day and it will be correct according to the number of days in a month etc
alert(myDate);
0 голосов
/ 24 февраля 2011

Самый простой способ - разделить его на массив, а затем использовать пару операторов if / else:

var date = (whatever you're pulling the date in as).split('-');
if (date[1] > 3)
   date[1] = date[1] - 3;
else
   date[0] = date[0] - 1;
   var dateOverflow = date[1]-3;
   date[1] = 12 - dateOverflow;

И то же самое для дней.

0 голосов
/ 24 февраля 2011

Вы можете использовать Date объекты (см. здесь ):

  1. извлекать год, месяц и день из строки (используя регулярное выражение или разделение на '-')
  2. создает новый Date объект с этими данными
  3. вычитает интервал дат
  4. строит строку обратно
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...