DHTML Calendar

12 de mayo de 2005
Valoración del artículo:
Un script en Javascript muy fácil de utilizar y con un aspecto formidable, que nos servirá para disponer de un calendario para seleccionar un fecha.
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
Cuando realizamos una interfaz de usuario, es típico tener campos donde el visitante deba introducir una fecha. Éstas tienen formatos bastante estrictos y son complicadas de escribir, por lo que es muy cómodo para el usuario contar con la posibilidad de utilizar un calendario para seleccionar la fecha.

En DesarrolloWeb.com hemos publicado un manual donde se explica cómo construir un calendario con PHP, un conocido lenguaje de programación de webs del lado del servidor. Ahora bien, no siempre el visitante va a tener la capacidad de entender la programación en PHP, o acceso a un servidor que permita la publicación de contenidos programados con PHP.

Por ello, será muy interesante conocer otras maneras de implementar un calendario en una página web. En este caso vamos a presentar DHTML Calendar, un calendario realizado en Javascript, compatible para todos los navegadores. Este script para incorporar un calendario es gratuito, por lo que podemos utilizarlo sin ningún tipo de límite.

Cómo es DHTML Calendar

Es un sistema muy potente y fácilmente configurable, con una interesante interfaz, totalmente dinámica. Se puede incluir de diversas maneras dentro de una página, como un popup, o directamente en el cuerpo de la página, lo que lo hace útil en diversas situaciones.

El script para configurar el calendario variará de un modo de presentación a otro. En la descarga del calendario se ofrecen algunos ejemplos rápidos para mostrar el calendario. Ejemplos para los impacientes, que pueden venir muy bien para empezar rápidamente. Una de las maneras más típicas de presentar el calendario puede ser utilizando un campo de texto y un botón. Al pulsar el botón se muestra el calendario y, una vez seleccionada una fecha, se escribe en el campo de texto.

El código del ejemplo sería el siguiente, muy parecido a uno de los ejemplos para los impacientes proporcionados en el paquete de descarga.

<html>
<head>

  <title>Calendario de pruebas</title>

  <!-Hoja de estilos del calendario -->
  <link rel="stylesheet" type="text/css" media="all" href="calendar-green.css" title="win2k-cold-1" />

  <!-- librería principal del calendario -->
 <script type="text/javascript" src="calendar.js"></script>

 <!-- librería para cargar el lenguaje deseado -->
  <script type="text/javascript" src="lang/calendar-es.js"></script>

  <!-- librería que declara la función Calendar.setup, que ayuda a generar un calendario en unas pocas líneas de código -->
  <script type="text/javascript" src="calendar-setup.js"></script>

</head>

<body>

<!-- formulario con el campo de texto y el botón para lanzar el calendario-->
<form action="#" method="get">
<input type="text" name="date" id="campo_fecha" />
<input type="button" id="lanzador" value="..." />
</form>

<!-- script que define y configura el calendario-->
<script type="text/javascript">
   Calendar.setup({
    inputField     :    "campo_fecha",     // id del campo de texto
     ifFormat     :     "%d/%m/%Y",     // formato de la fecha que se escriba en el campo de texto
     button     :    "lanzador"     // el id del botón que lanzará el calendario
});
</script>

</body>
</html>


El código anterior está comentado para que se entienda más fácilmente. Tiene varias partes.
  • En la cabecera se incluyen varios ficheros con las funciones y estilos del calendario. Estos ficheros se encuentran en los archivos de descarga del calendario. Existen varios estilos que se pueden utilizar para ajustar el aspecto del calendario al diseño de la página. También se debe incluir el lenguaje en el que presentar el calendario, en este caso español, que está también incluido en el paquete de descarga.
  • Ya en el cuerpo de la página, se muestra el formulario. Es muy simple, pues sólo tiene un campo de texto y un botón para mostrar el calendario.
  • En el script de javascript, también dentro del cuerpo de la página, se utiliza la función Calendar.setup, que sirve para cargar el calendario y configurarlo con los valores que deseemos. Todas las opciones de configuración tienen valores por defecto, aunque siempre vamos a tener que definir, como mínimo, los datos que ponemos en este ejemplo. El dato "inputField" sirve para indicar el identificador (atributo id) del campo input donde se tiene que escribir la fecha. El valor "ifFormat" sirve para ajustar el formato de la fecha que se desea escribir en el campo de texto. Por último, el valor "button" debe contener el identificador del botón que lanzará el calendario al pulsarlo.

Ha sido un ejemplo lo más simplificado posible. Podemos ver la marcha del calendario que genera este código en una página aparte.

En la documentación podremos encontrar más ejemplos del calendario y una explicación detallada de su utilización.

Más información en la página del producto: http://www.dynarch.com/projects/calendar/

DHTML Calentar es un proyecto alojado en SourceForge.net, con la siguiente página de proyecto: http://sourceforge.net/projects/jscalendar

Comentarios
Fueron enviados 15 comentarios al artículo
9 comentarios no revisados
6 comentarios revisados:
Por: Bryan
13/2/06
Muy interesante y muy util ademas que su nivel de configuracion es bastante elevado. Lo configure de acuerdo a mis ecesidades pero lo que hago es kargar el codigo con AJAX para que luego de seleccionar en una lista desplegable me muestre el calendario pero no lo hace no se como establecer una función para que cuando carge se ejecute el script y muestr el calendario.
Saludos
Por: Leandro
23/6/06
Para mostrar 2 calendarios en la misma pagina tenes que ponerle distinto ID al boton o imagen que hace que se muestre el calendario. Luego tenes que repetir el codigo js que muestra el calendario y ponerle en button el id de un boton y en el otro el id del otro.
Espero haber sido lo mas claro posible.
Por las dudas:
<!-- script que define y configura el calendario-->
<script type="text/javascript">
Calendar.setup({
inputField : "campo_fecha", // id del campo de texto
ifFormat : "%A %d / %B %I:%M %p", // formato de la fecha que se escriba en el campo de texto
showsTime : true,
button : "lanzador" // el id del botón que lanzará el calendario
});
</script>
<!-- script que define y configura el calendario-->
<script type="text/javascript">
Calendar.setup({
inputField : "campo_fecha2", // id del campo de texto
ifFormat : "%A %d / %B %I:%M %p", // formato de la fecha que se escriba en el campo de texto
showsTime : true,
button : "lanzador2" // el id del botón que lanzará el calendario
});
</script>

Saludos,
Por: lolo
30/10/06
hay un pegeño bug en el archivo español, le falta la línea de código Calendar._FD = 0; al archivo calendar-sp.js, sin esta línea no se ven los dias.
un saludo

edwion_...
Excelente
15/7/09
justo lo q queria aunq he visto mucho mas dinamicos, pero es buen aporte para empeza gracias de antemano.
Muy buena herramienta
19/10/09
Es muy completo .... ahora, me estoy encontrando con el problema de que no puedo recuperar el contenido desde una hoja php. via post.

gabriel...
duda con este calendario
26/1/10
Alguien puede decirme como puedo implementar este calendario.setup en campos dinamicos ya que lo hice pero me da error en IE
la forma en que lo estoy creando es la siguiente

if (_ie){
//CONDICION PARA IE
elementoInput = document.createElement("<input name='txtFin" + r + "' value='dd/mm/yyyy' id='txtFin" + r + "' maxlength='10' size='10' onClick='' onKeyPress='' onFocus='javascript:Calendar.setup({ inputField:'txtFin" + r + "', ifFormat:'%d/%m/%Y', button :''});"); ' />");
} else {
//CONDICION PARA OTRO NAVEGADOR COMO MOZILLA
elementoInput = document.createElement("input");
elementoInput.setAttribute("name", "txtFin" + r);
elementoInput.setAttribute("id", "txtFin" + r);
elementoInput.setAttribute("onBlur", "");
elementoInput.setAttribute("value","dd/mm/yyyy");
elementoInput.setAttribute("title","Clic sobre la caja para ver Calendario");
elementoInput.setAttribute("onFocus", "javascript:Calendar.setup({ inputField:'txtFin" + r + "', ifFormat:'%d/%m/%Y', button :''});");
elementoInput.setAttribute("onKeyPress","return LP_data_fecha(event)");
elementoInput.setAttribute("onBlur","javascript:validaFecha(this), Comparafechas(form.txtInicio" + r + ",form.txtFin" + r + ", form)");
}
elementoCelda.appendChild(elementoInput);
elementoRenglon.appendChild(elementoCelda);



Ojo: en Mozilla me funciona bien el problema es en internet explorer me dice error de sintaxis ojala alguien ya haya echo algo con formularios dinamicos y me pueda ayudar muchas gracias de antemano

Manuales relacionados
Categorias relacionadas
El autor
Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Alojados en el grupo