Javascript Date селектор - PullRequest
       8

Javascript Date селектор

0 голосов
/ 03 июня 2011

Мне нужно, чтобы пользователь выбрал его / ее дату рождения, и я использую javascript & php.

    var date_arr = new Array;
var days_arr = new Array;

date_arr[0]=new Option("January",31);
date_arr[1]=new Option("February",28);
date_arr[2]=new Option("March",31);
date_arr[3]=new Option("April",30);
date_arr[4]=new Option("May",31);
date_arr[5]=new Option("June",30);
date_arr[6]=new Option("July",31);
date_arr[7]=new Option("August",30);
date_arr[8]=new Option("September",30);
date_arr[9]=new Option("October",31);
date_arr[10]=new Option("November",31);
date_arr[11]=new Option("December",30);

function fill_select(f)
{
        document.writeln("<SELECT name=\"months\"               onchange=\"update_days(FRM)\">");
        for(x=0;x<12;x++)
                document.writeln("<OPTION value=\""+date_arr[x].value+"\">"+date_arr[x].text);
        document.writeln("</SELECT><SELECT name=\"days\"></SELECT>");
        selection=f.months[f.months.selectedIndex].value;
}

function update_days(f)
{
        temp=f.days.selectedIndex;
        for(x=days_arr.length;x>0;x--)
        {
                days_arr[x]=null;
                f.days.options[x]=null;
         }
        selection=parseInt(f.months[f.months.selectedIndex].value);
        ret_val = 0;
        if(f.months[f.months.selectedIndex].value == 28)
        {
                year=parseInt(f.years.options[f.years.selectedIndex].value);
                if (year % 4 != 0 || year % 100 == 0 ) ret_val=0;
                else
                        if (year % 400 == 0)  ret_val=1;
                        else
                                ret_val=1;
        }
        selection = selection + ret_val;
        for(x=1;x < selection+1;x++)

        {
                days_arr[x-1]=new Option(x);
                f.days.options[x-1]=days_arr[x-1];
        }
        if (temp == -1) f.days.options[0].selected=true;
        else
             f.days.options[temp].selected=true;
}
function year_install(f)
{
        document.writeln("<SELECT name=\"years\" onchange=\"update_days(FRM)\">")
        for(x=1950;x<2005;x++) document.writeln("<OPTION value=\""+x+"\">"+x);
        document.writeln("</SELECT>");
        update_days(f)
}

Это генерирующий код:

<script>fill_select(document.frmProfile);year_install(document.frmProfile)</script>

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

Например: - Если я хочу выбрать 20 февраля 1996, я хочу получить выходные данные 1996-02-20, чтобы войти в БД. Используя этот код, я получаю вывод как 1996-28-20 Я знаю, что проблема в этой функции

function fill_select(f)
    {
            document.writeln("<SELECT name=\"months\"               onchange=\"update_days(FRM)\">");
            for(x=0;x<12;x++)
                    document.writeln("<OPTION value=\""+date_arr[x].value+"\">"+date_arr[x].text);
            document.writeln("</SELECT><SELECT name=\"days\"></SELECT>");
            selection=f.months[f.months.selectedIndex].value;
    }

Но я просто не знаю, что именно я должен изменить

1 Ответ

0 голосов
/ 03 июня 2011

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

Поскольку значения параметров используются при нажатии кнопки «отправить», вы не хотите, чтобы значения месяца содержали их количество дней (28, 30, 31), а вместо этого их действительное число (1-12).

Так измени

for(x=0;x<12;x++)
    document.writeln("<OPTION value=\""+date_arr[x].value+"\">"+date_arr[x].text);

... в ...

for(x=0;x<12;x++)
    document.writeln("<OPTION value=\""+(x+1)+"\">"+date_arr[x].text);

Теперь мы не можем больше полагаться на эти значения, чтобы определить, сколько дней в месяце, но мы можем использовать для этого date_arr. Так что поменяйте:

selection=parseInt(f.months[f.months.selectedIndex].value);
ret_val = 0;
if(f.months[f.months.selectedIndex].value == 28)
{ // (...)

... в ...

selection=parseInt(date_arr[f.months.selectedIndex].value);
ret_val = 0;
if(selection == 28)
{ // (...)

Теперь это должно работать лучше. Удачи.

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