Foros del Web » Programando para Internet » Javascript »

Consulta calendario

Estas en el tema de Consulta calendario en el foro de Javascript en Foros del Web. Buenas tardes tengo que hacer un calendario y no consigo que me salte de linea cuando dejo los espacios en blanco en la primera semana ...
  #1 (permalink)  
Antiguo 07/04/2011, 08:55
 
Fecha de Ingreso: marzo-2011
Mensajes: 37
Antigüedad: 13 años
Puntos: 0
Consulta calendario

Buenas tardes tengo que hacer un calendario y no consigo que me salte de linea cuando dejo los espacios en blanco en la primera semana de cada mes, os enseño el resultado y el codigo:

Abril 2011

LU MA MI JU VI SA DO
- - - - 1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

Codigo:

<html>
<head>
<title>Calendario</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<script language="JavaScript">

var diamesact;
var diasemana;
var mes;
var ano; //año
var diasmes; //dias de los meses
var x;
var y;
var diasemanact;
var i;
var j=0;
var z=0;
var columna;

meses=new Array();
meses[0]="Enero";
meses[1]="Febrero";
meses[2]="Marzo";
meses[3]="Abril";
meses[4]="Mayo";
meses[5]="Junio";
meses[6]="Julio";
meses[7]="Agosto";
meses[8]="Septiembre";
meses[9]="Octubre";
meses[10]="Noviembre";
meses[11]="Diciembre";

dias=new Array(31,28,31,30,31,30,31,31,30,31,30,31);

cita=new Array(null,null,null,null,null,null,null)

function mostrarcalendario()
{
var fecha=new Date()
diamesact=fecha.getDate();
diasemana=fecha.getDay()-1;
mes=fecha.getMonth()+1;
ano=fecha.getYear();


if((mes==1)||(mes==3)||(mes==5)||(mes==7)||(mes==8 )||(mes==10)||(mes==12))
{
diasmes=dias[0];
}
else if(mes==2)
{
diasmes=dias[1];
}
else
{
diasmes=dias[3];
}

document.write("<center><table border=1>");
document.write("<tr>");
document.write("<th bgcolor='aliceblue'>" + meses[mes-1] +" "+ ano +"</th>") // -1 uno para que se ajuste al array y de el mes correcto
document.write("</table>");

document.write("<center><table border=1>");
document.write("<tr>");
document.write("<th>LU</th><th>MA</th><th>MI</th><th>JU</th><th>VI</th><th>SA</th><th>DO</th>")
document.write("<tr>");

// Calcula los espacios en blanco del mes actual - aqui no me hace el salto.
for(x=diamesact; x>1; x--)
{
if (diasemana==0)
{
diasemana=7;
}
else
{
diasemana--;

}
}

for (i=1;i<diasemana;i++)
{
document.write ("<th>")
}

for (i=1; i<=diasmes; i++)
{
if(cita[i]!=null)
{
document.write("<th>" +'<a href="javascript:volverpadre()' + cita[i] + '">' + i + '</a>'+ "<th>")
j++;
}
else
{
document.write("<th>" + i + "</th>")
j++;
}
if(j==7)
{
document.write("<tr>")
j=0;
}
}
document.write("</table>");
}

</script>

<script language="JavaScript">

function volverpadre()
{

opener.window.dato="prueba";
opener.window.escritura();
window.close();
}
</script>
</head>
<body>

<script language="JavaScript">

mostrarcalendario()

</script>
</body>
</html>


Bueno, espero que me podais ayudar. Un saludo.

Última edición por ricardo_eslokehay; 07/04/2011 a las 09:58 Razón: error tipografico
  #2 (permalink)  
Antiguo 07/04/2011, 10:02
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años
Puntos: 192
Respuesta: Consulta calendario

El script tiene muchos errores. Para empezar, jamás cerrás los <tr> o los <th>. Si bien el navegador puede cerrarlos automáticamente, lo mejor es que lo hagas en tu código.

La falla que mencionás no está donde vos la marcaste, sino acá:

Código Javascript:
Ver original
  1. if (j == 7) {
  2.             document.write("</tr>");
  3.             j = 0;
  4.         }

Eso hace que siempre escriba 7 días. Jamás inicializás j! Se corrigiría si iniciás j con el valor de diasemana - 1 de forma que no inicie en y no se ejecute ese código 7 veces si es que hay espacios en blanco. De todas formas hacer un calendario no es tan fácil como parece. No estás considerando años bisiestos. Además, si por ejemplo el 1ro del mes es un lunes, tu código que calcula diasemana también está mal pues devolvería -7.

En fin, trabajar con fechas en programación por lo general requiere mucho trabajo. ¿Por qué no usás un calendario en JS ya hecho? Hay cientos :P
__________________
nahueljose.com.ar
  #3 (permalink)  
Antiguo 07/04/2011, 12:54
 
Fecha de Ingreso: marzo-2011
Mensajes: 37
Antigüedad: 13 años
Puntos: 0
Respuesta: Consulta calendario

Hola gracias por contestar, esque estoy haciendo un curso y tengo que hacerlo asi, sin que tenga que haber años bisiestos, etc...

¿Entonces como seria el codigo?, esque me perdi en lo de iniciar J con el valor de diasemana-1

Un saludo
  #4 (permalink)  
Antiguo 07/04/2011, 13:06
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años
Puntos: 192
Respuesta: Consulta calendario

Entiendo.

Bueno el código que te paso tiene corregido los problemas que no cerrás la etiquetas y le agregué lo del inicializamiento de j (el cual si estaba iniciado en 0 al comienzo :P ).
Código Javascript:
Ver original
  1. var diamesact;
  2. var diasemana;
  3. var mes;
  4. var ano; //año
  5. var diasmes; //dias de los meses
  6. var x;
  7. var y;
  8. var diasemanact;
  9. var i;
  10. var j = 0;
  11. var z = 0;
  12. var columna;
  13.  
  14. meses = new Array();
  15. meses[0] = "Enero";
  16. meses[1] = "Febrero";
  17. meses[2] = "Marzo";
  18. meses[3] = "Abril";
  19. meses[4] = "Mayo";
  20. meses[5] = "Junio";
  21. meses[6] = "Julio";
  22. meses[7] = "Agosto";
  23. meses[8] = "Septiembre";
  24. meses[9] = "Octubre";
  25. meses[10] = "Noviembre";
  26. meses[11] = "Diciembre";
  27.  
  28. dias = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  29.  
  30. cita = new Array(null, null, null, null, null, null, null)
  31.  
  32. function mostrarcalendario() {
  33.     var fecha = new Date()
  34.     diamesact = fecha.getDate();
  35.     diasemana = fecha.getDay() - 1;
  36.     mes = fecha.getMonth() + 1;
  37.     ano = fecha.getYear();
  38.  
  39.  
  40.     if ((mes == 1) || (mes == 3) || (mes == 5) || (mes == 7) || (mes == 8) || (mes == 10) || (mes == 12)) {
  41.         diasmes = dias[0];
  42.     } else if (mes == 2) {
  43.         diasmes = dias[1];
  44.     } else {
  45.         diasmes = dias[3];
  46.     }
  47.  
  48.     document.write("<center><table border=1>");
  49.     document.write("<tr>");
  50.     document.write("<th bgcolor='aliceblue'>" + meses[mes - 1] + " " + ano + "</th>") // -1 uno para que se ajuste al array y de el mes correcto
  51.     document.write("</tr>");
  52.     document.write("</table>");
  53.  
  54.     document.write("<center><table border=1>");
  55.     document.write("<tr>");
  56.     document.write("<th>LU</th><th>MA</th><th>MI</th><th>JU</th><th>VI</th><th>SA</th><th>DO</th>");
  57.     document.write("</tr>");
  58.  
  59.     // Calcula los espacios en blanco del mes actual - aqui no me hace el salto.
  60.     for (x = diamesact; x > 1; x--) {
  61.         if (diasemana == 0) {
  62.             diasemana = 7;
  63.         } else {
  64.             diasemana--;
  65.         }
  66.     }
  67.    
  68.     document.write("<tr>");
  69.     for (i = 1; i < diasemana; i++) {
  70.         document.write("<th></th>");
  71.     }
  72.     var j=diasemana-1;//<--- inicializar j en algun valor, por si hay espacios en blanco
  73.     for (i = 1; i <= diasmes; i++) {
  74.         if (cita[i] != null) {
  75.             document.write("<th>" + '<a href="javascript:volverpadre()' + cita[i] + '">' + i + '</a>' + "</th>")
  76.             j++;
  77.         } else {
  78.             document.write("<th>" + i + "</th>");
  79.             j++;
  80.         }
  81.         if (j == 7) {
  82.             document.write("</tr>");
  83.             j = 0;
  84.         }
  85.     }
  86.     document.write("</table>");
  87. }

De todas formas deberías revisar en varios meses a ver si algo sale mal... yo no estoy familiarizado con el código ni tengo muchas ganas tampoco de hacer todo eso :P
__________________
nahueljose.com.ar
  #5 (permalink)  
Antiguo 07/04/2011, 13:49
 
Fecha de Ingreso: marzo-2011
Mensajes: 37
Antigüedad: 13 años
Puntos: 0
Respuesta: Consulta calendario

Muy bien muchas gracias ya has echo bastante. Un saludo.

Etiquetas: calendario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:21.