Запретить даты с JavaScript, используя выпадающие списки для MM, DD и YYYY - PullRequest
0 голосов
/ 02 ноября 2011

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


    function date_check()
{
    var trans_date = document.form1.selectmonth.options[document.form1.selectmonth.selectedIndex].value + "-" + document.form1.selectday.options[document.form1.selectday.selectedIndex].value + "-" + document.form1.selectyear[document.form1.selectyear.selectedIndex].value;
    var d = new Date();
    var today = (d.getMonth()+1) + "-" + d.getDate() + "-" + d.getFullYear();
    if(new Date(trans_date) < new Date(today)){
        alert("The shipping date cannot be in the past, please enter a valid shipping date.");
        return false;
        }


}

Это то, что я придумал, но это не работает. Я что-то упустил? Я оставлю его выбранным как 1 января 2011 года, и он не выдаст предупреждение.

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

Просто получите выбранные значения из рассматриваемых элементов, объедините значения с помощью «-» или «/» и используйте конструктор Date для создания объекта даты - сравните это с текущей датой - если оно меньшетекущая дата, затем сбой.

// Inside your form's validation handler ...

var year, month, day, provided_date, now = new Date();

// Remove the hours, minutes and seconds from the now timestamp
now = new Date(now.getYear(), now.getMonth(), now.getDate());

// Get your year select - document.getElementById
// or any other method you have available

year = your_year_select.options[your_year_select.selectedIndex].value;
// and so on for month and day


// Remember, month is 0 indexed in JavaScript (January is month 0)
// so make sure your dropdown values take account of this.
// Otherwise, use month - 1 here.
provided_date = new Date(year, month, day);

// if all you need to do is validate the date
return provided_date >= now;
0 голосов
/ 02 ноября 2011

Похоже, вам просто нужна функция проверки, которая создает новую дату из выбранных входов и сравнивает ее с текущей датой.Что-то вроде:

function isFutureDate(year, month, day) {
    return (Date.parse("" + year + "-" + month + "-" + day)) - new Date() > 0;
}

За исключением того, что вам, вероятно, придется учитывать смещение часового пояса.

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