Combo Calendário em Javascript

2010-05-07 22:12

Semelhante pickdate do Delphi este não é simplesmente mais um calendário em Javascript e sim um calendário completo com navegação de meses e anos que seta a data escolhida em um campo de formulário. 

Com este caledário você poderá melhorar a interface de entrada de datas em seu formulário. 

 

 

 

<!-- insira o seguinte código de javascript em sua página. -->

 

<script language='Javascript'>

 

// **************************************************

// * Autor : Peter M Jordan - uranking@uranking.com *

// * página: www.uranking.com                       *

// **************************************************

 

// construindo o calendário

function popdate(obj,div,tam,ddd)

{

    if (ddd) 

    {

        day = ""

        mmonth = ""

        ano = ""

        c = 1

        char = ""

        for (s=0;s<parseInt(ddd.length);s++)

        {

            char = ddd.substr(s,1)

            if (char == "/") 

            {

                c++; 

                s++; 

                char = ddd.substr(s,1);

            }

            if (c==1) day    += char

            if (c==2) mmonth += char

            if (c==3) ano    += char

        }

        ddd = mmonth + "/" + day + "/" + ano

    }

  

    if(!ddd) {today = new Date()} else {today = new Date(ddd)}

    date_Form = eval (obj)

    if (date_Form.value == "") { date_Form = new Date()} else {date_Form = new Date(date_Form.value)}

  

    ano = today.getFullYear();

    mmonth = today.getMonth ();

    day = today.toString ().substr (8,2)

  

    umonth = new Array ("Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro")

    days_Feb = (!(ano % 4) ? 29 : 28)

    days = new Array (31, days_Feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)

 

    if ((mmonth < 0) || (mmonth > 11))  alert(mmonth)

    if ((mmonth - 1) == -1) {month_prior = 11; year_prior = ano - 1} else {month_prior = mmonth - 1; year_prior = ano}

    if ((mmonth + 1) == 12) {month_next  = 0;  year_next  = ano + 1} else {month_next  = mmonth + 1; year_next  = ano}

    txt  = "<table bgcolor='#efefff' style='border:solid #330099; border-width:2' cellspacing='0' cellpadding='3' border='0' width='"+tam+"' height='"+tam*1.1 +"'>"

    txt += "<tr bgcolor='#FFFFFF'><td colspan='7' align='center'><table border='0' cellpadding='0' width='100%' bgcolor='#FFFFFF'><tr>"

    txt += "<td width=20% align=center><a href=javascript:popdate('"+obj+"','"+div+"','"+tam+"','"+((mmonth+1).toString() +"/01/"+(ano-1).toString())+"') class='Cabecalho_Calendario' title='Ano Anterior'><<</a></td>"

    txt += "<td width=20% align=center><a href=javascript:popdate('"+obj+"','"+div+"','"+tam+"','"+( "01/" + (month_prior+1).toString() + "/" + year_prior.toString())+"') class='Cabecalho_Calendario' title='Mês Anterior'><</a></td>"

    txt += "<td width=20% align=center><a href=javascript:popdate('"+obj+"','"+div+"','"+tam+"','"+( "01/" + (month_next+1).toString()  + "/" + year_next.toString())+"') class='Cabecalho_Calendario' title='Próximo Mês'>></a></td>"

    txt += "<td width=20% align=center><a href=javascript:popdate('"+obj+"','"+div+"','"+tam+"','"+((mmonth+1).toString() +"/01/"+(ano+1).toString())+"') class='Cabecalho_Calendario' title='Próximo Ano'>>></a></td>"

    txt += "<td width=20% align=right><a href=javascript:force_close('"+div+"') class='Cabecalho_Calendario' title='Fechar Calendário'><b>X</b></a></td></tr></table></td></tr>"

    txt += "<tr><td colspan='7' align='right' bgcolor='#ccccff' class='mes'><a href=javascript:pop_year('"+obj+"','"+div+"','"+tam+"','" + (mmonth+1) + "') class='mes'>" + ano.toString() + "</a>"

    txt += " <a href=javascript:pop_month('"+obj+"','"+div+"','"+tam+"','" + ano + "') class='mes'>" + umonth[mmonth] + "</a> <div id='popd' style='position:absolute'></div></td></tr>"

    txt += "<tr bgcolor='#330099'><td width='14%' class='dia' align=center><b>Dom</b></td><td width='14%' class='dia' align=center><b>Seg</b></td><td width='14%' class='dia' align=center><b>Ter</b></td><td width='14%' class='dia' align=center><b>Qua</b></td><td width='14%' class='dia' align=center><b>Qui</b></td><td width='14%' class='dia' align=center><b>Sex<b></td><td width='14%' class='dia' align=center><b>Sab</b></td></tr>"

    today1 = new Date((mmonth+1).toString() +"/01/"+ano.toString());

    diainicio = today1.getDay () + 1;

    week = d = 1

    start = false;

 

    for (n=1;n<= 42;n++) 

    {

        if (week == 1)  txt += "<tr bgcolor='#efefff' align=center>"

        if (week==diainicio) {start = true}

        if (d > days[mmonth]) {start=false}

        if (start) 

        {

            dat = new Date((mmonth+1).toString() + "/" + d + "/" + ano.toString())

            day_dat   = dat.toString().substr(0,10)

            day_today  = date_Form.toString().substr(0,10)

            year_dat  = dat.getFullYear ()

            year_today = date_Form.getFullYear ()

            colorcell = ((day_dat == day_today) && (year_dat == year_today) ? " bgcolor='#FFCC00' " : "" )

            txt += "<td"+colorcell+" align=center><a href=javascript:block('"+  d + "/" + (mmonth+1).toString() + "/" + ano.toString() +"','"+ obj +"','" + div +"') class='data'>"+ d.toString() + "</a></td>"

            d ++ 

        } 

        else 

        { 

            txt += "<td class='data' align=center> </td>"

        }

        week ++

        if (week == 8) 

        { 

            week = 1; txt += "</tr>"} 

        }

        txt += "</table>"

        div2 = eval (div)

        div2.innerHTML = txt 

}

  

// função para exibir a janela com os meses

function pop_month(obj, div, tam, ano)

{

  txt  = "<table bgcolor='#CCCCFF' border='0' width=80>"

  for (n = 0; n < 12; n++) { txt += "<tr><td align=center><a href=javascript:popdate('"+obj+"','"+div+"','"+tam+"','"+("01/" + (n+1).toString() + "/" + ano.toString())+"')>" + umonth[n] +"</a></td></tr>" }

  txt += "</table>"

  popd.innerHTML = txt

}

 

// função para exibir a janela com os anos

function pop_year(obj, div, tam, umonth)

{

  txt  = "<table bgcolor='#CCCCFF' border='0' width=160>"

  l = 1

  for (n=1991; n<2012; n++)

  {  if (l == 1) txt += "<tr>"

     txt += "<td align=center><a href=javascript:popdate('"+obj+"','"+div+"','"+tam+"','"+(umonth.toString () +"/01/" + n) +"')>" + n + "</a></td>"

     l++

     if (l == 4) 

        {txt += "</tr>"; l = 1 } 

  }

  txt += "</tr></table>"

  popd.innerHTML = txt 

}

 

// função para fechar o calendário

function force_close(div) 

    { div2 = eval (div); div2.innerHTML = ''}

    

// função para fechar o calendário e setar a data no campo de data associado

function block(data, obj, div)

    force_close (div)

    obj2 = eval(obj)

    obj2.value = data 

}

 

</script>

 

<!-- 

o css abaixo é apenas para dar uma aparência melhor para o calendário. vc pode mudá-lo a sua maneira 

insira o código abaixo entre as tags <HEAD> </HEAD> de sua página

-->

<style>

    .dia {font-family: helvetica, arial; font-size: 8pt; color: #FFFFFF}

    .data {font-family: helvetica, arial; font-size: 8pt; text-decoration:none; color:#191970}

    .mes {font-family: helvetica, arial; font-size: 8pt}

    .Cabecalho_Calendario {font-family: helvetica, arial; font-size: 10pt; color: #000000; text-decoration:none; font-weight:bold}

</style>

 

 

<!-- insira o código abaixo dentro das tags <BODY> </BODY> de sua página -->

<form name='form1'>

 

<!-- data 1 -->

<input NAME="data1" SIZE="10" MAXLENGTH="10" value=""> 

<input TYPE="button" NAME="btnData1" VALUE="..." Onclick="javascript:popdate('document.form1.data1','pop1','150',document.form1.data1.value)">

<!-- 

    na span abaixo aparece o primeiro calendario.

    vc pode colocar a span abaixo no lugar onde quiser em sua 

    pagina inclusive dentro de uma table para facilitar o 

    posicionamento. Mas lembre-se que quanto mais perto a span 

    estiver do campo de data a ela associada mais fácil será para

    o usuario associar. 

-->

 

<span id="pop1" style="position:absolute"></span>

 

<br><br>      

<!-- data 2 -->

<input NAME="data2" SIZE="10" MAXLENGTH="10" value=""> 

<input TYPE="button" NAME="btnData2" VALUE="..." Onclick="javascript:popdate('document.form1.data2','pop2','150',document.form1.data2.value)">

<!-- na span abaixo aparece o segundo calendario -->

<span id="pop2" style="position:absolute"></span>

      

<!-- 

    caso queira inserir outros campos de data em sua página

    certifique-se de substituir corretamente os nomes dos

    objetos em javascript. 

    EX: o objeto input text será o data3 - ou como vc quiser

        o objeto button será o btnData3 - ou como vc quiser

        nas chamadas das funçoes no evento onClick os nomes

        deverão referenciar seus respectivos objetos.

-->

</form>


Related Posts with Thumbnails