PHP - Calendario en PHP

 
Vista:

Calendario en PHP

Publicado por jmuoz (21 intervenciones) el 06/05/2014 00:10:24
Buenas tardes me dirijo por este medio para compartir un problema que tengo ya eh buscado soluciones pero aun no queda, espero puedan darme una pista o idea por donde ir,.
Tengo un calendario en php y lo que busco es que me muestre el mes actual en este caso Mayo y el anterior osea Abril, solo me muestra Mayo y abril no dejo parte del codigo que encontre.

funciones.php
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
function mostrar_calendario($mes,$ano){
	//tomo el nombre del mes que hay que imprimir
	$nombre_mes = dame_nombre_mes($mes);
 
	//construyo la tabla general
	echo '<table class="tablacalendario" cellspacing="3" cellpadding="2" border="1">';
	echo '<tr><td colspan="7" class="tit">';
	//tabla para mostrar el mes el año y los controles para pasar al mes anterior y siguiente
	echo '<table width="100%" cellspacing="2" cellpadding="2" border="0"><tr><td class="messiguiente">';
	//calculo el mes y ano del mes anterior
	$mes_anterior = $mes - 1;
	$ano_anterior = $ano;
	if ($mes_anterior==0){
		$ano_anterior--;
		$mes_anterior=12;
	}
	echo $mes_anterior;
 
	echo '<a href="Principal.php?nuevo_mes=' . $mes_anterior . '&nuevo_ano=' . $ano_anterior .'"><span>&lt;&lt;</span></a></td>';
	   echo '<td class="titmesano">' . $nombre_mes . " " . $ano . '</td>';
	   echo '<td class="mesanterior">';
	//calculo el mes y ano del mes siguiente
	$mes_siguiente = $mes + 1;
	$ano_siguiente = $ano;
	if ($mes_siguiente==13){
		$ano_siguiente++;
		$mes_siguiente=1;
	}
	echo $mes_siguiente;
 
	echo '<a href="Principal.php?nuevo_mes=' . $mes_siguiente . '&nuevo_ano=' . $ano_siguiente . '"><span>&gt;&gt;</span></a></td>';
	//finalizo la tabla de cabecera
	echo '</tr></table>';
	echo '</td></tr>';
	//fila con todos los días de la semana
	echo '	<tr>
				<td width="14%" class="diasemana"><span>L</span></td>
				<td width="14%" class="diasemana"><span>M</span></td>
				<td width="14%" class="diasemana"><span>Mi</span></td>
				<td width="14%" class="diasemana"><span>J</span></td>
				<td width="14%" class="diasemana"><span>V</span></td>
				<td width="14%" class="diasemana"><span>S</span></td>
				<td width="14%" class="diasemana"><span>D</span></td>
			</tr>';
 
	//Variable para llevar la cuenta del dia actual
	$dia_actual = 1;
 
	//calculo el numero del dia de la semana del primer dia
	$numero_dia = calcula_numero_dia_semana(1,$mes,$ano);
	//echo "Numero del dia de demana del primer: $numero_dia <br>";
 
	//calculo el último dia del mes
	$ultimo_dia = ultimoDia($mes,$ano);
 
	//escribo la primera fila de la semana
	echo "<tr>";
	for ($i=0;$i<7;$i++){
		if ($i < $numero_dia){
			//si el dia de la semana i es menor que el numero del primer dia de la semana no pongo nada en la celda
			echo '<td class="diainvalido"><span></span></td>';
		} else {
			echo '<td class="diavalido" bgcolor="green"><span>' . $dia_actual . '</span></td>';
			$dia_actual++;
		}
	}
	echo "</tr>";
 
	//recorro todos los demás días hasta el final del mes
	$numero_dia = 0;
	while ($dia_actual <= $ultimo_dia){
		//si estamos a principio de la semana escribo el <TR>
		if ($numero_dia == 0)
			echo "<tr bgcolor=''>";
		echo '<td class="diavalido" bgcolor="green"><span>' . $dia_actual . '</span></td>';
		$dia_actual++;
		$numero_dia++;
		//si es el uñtimo de la semana, me pongo al principio de la semana y escribo el </tr>
		if ($numero_dia == 7){
			$numero_dia = 0;
			echo "</tr>";
		}
	}
 
	//compruebo que celdas me faltan por escribir vacias de la última semana del mes
	for ($i=$numero_dia;$i<7;$i++){
		echo '<td class="diainvalido"><span></span></td>';
	}
 
	echo "</tr>";
	echo "</table>";
}

En otro archivo mando a llamar la funcion mostrarcalendario donde recibo los parametros. Puedo llegar a tener dos calendarios con el mismo mes osea Mayo - Mayo y lo que busco es Abril - Mayo, espero puedan darme una pista, saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Calendario en PHP

Publicado por xve (6935 intervenciones) el 06/05/2014 11:12:54
Hola, he intentado ejecutar tu código, pero me faltan las funciones:
dame_nombre_mes()
calcula_numero_dia_semana()
ultimoDia()

nos las puedes adjuntar para poder probar tu código?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Calendario en PHP

Publicado por jmuoz (21 intervenciones) el 06/05/2014 15:09:33
Ok, pongo las funciones que faltan en complemento con el codigo anterior
fuunciones.php
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
function calcula_numero_dia_semana($dia,$mes,$ano){
	$numerodiasemana = date('w', mktime(0,0,0,$mes,$dia,$ano));
	if ($numerodiasemana == 0)
		$numerodiasemana = 6;
	else
		$numerodiasemana--;
	return $numerodiasemana;
}
  // mostrar_calendario($prueba);
 
//funcion que devuelve el último día de un mes y año dados
function ultimoDia($mes,$ano){
	$ultimo_dia=28;
	while (checkdate($mes,$ultimo_dia,$ano)){
	        $ultimo_dia++;
	}
	$ultimo_dia--;
	return $ultimo_dia;
}
function dame_nombre_mes($mes){
	 switch ($mes){
	 	case 1:
			$nombre_mes="Enero";
			break;
	 	case 2:
			$nombre_mes="Febrero";
			break;
	 	case 3:
			$nombre_mes="Marzo";
			break;
	 	case 4:
			$nombre_mes="Abril";
			break;
	 	case 5:
			$nombre_mes="Mayo";
			break;
	 	case 6:
			$nombre_mes="Junio";
			break;
	 	case 7:
			$nombre_mes="Julio";
			break;
	 	case 8:
			$nombre_mes="Agosto";
			break;
	 	case 9:
			$nombre_mes="Septiembre";
			break;
	 	case 10:
			$nombre_mes="Octubre";
			break;
	 	case 11:
			$nombre_mes="Noviembre";
			break;
	 	case 12:
			$nombre_mes="Diciembre";
			break;
	}
	return $nombre_mes;
}
function mostrar_calendario($mes,$ano){
	//tomo el nombre del mes que hay que imprimir
	$nombre_mes = dame_nombre_mes($mes);
 
	//construyo la tabla general
	echo '<table class="tablacalendario" cellspacing="3" cellpadding="2" border="1">';
	echo '<tr><td colspan="7" class="tit">';
	//tabla para mostrar el mes el año y los controles para pasar al mes anterior y siguiente
	echo '<table width="100%" cellspacing="2" cellpadding="2" border="0"><tr><td class="messiguiente">';
	//calculo el mes y ano del mes anterior
	$mes_anterior = $mes - 1;
	$ano_anterior = $ano;
	if ($mes_anterior==0){
		$ano_anterior--;
		$mes_anterior=12;
	}
	echo $mes_anterior;
 
	echo '<a href="Principal.php?nuevo_mes=' . $mes_anterior . '&nuevo_ano=' . $ano_anterior .'"><span>&lt;&lt;</span></a></td>';
	   echo '<td class="titmesano">' . $nombre_mes . " " . $ano . '</td>';
	   echo '<td class="mesanterior">';
	//calculo el mes y ano del mes siguiente
	$mes_siguiente = $mes + 1;
	$ano_siguiente = $ano;
	if ($mes_siguiente==13){
		$ano_siguiente++;
		$mes_siguiente=1;
	}
	echo $mes_siguiente;
 
	echo '<a href="Principal.php?nuevo_mes=' . $mes_siguiente . '&nuevo_ano=' . $ano_siguiente . '"><span>&gt;&gt;</span></a></td>';
	//finalizo la tabla de cabecera
	echo '</tr></table>';
	echo '</td></tr>';
	//fila con todos los días de la semana
	echo '	<tr>
				<td width="14%" class="diasemana"><span>L</span></td>
				<td width="14%" class="diasemana"><span>M</span></td>
				<td width="14%" class="diasemana"><span>Mi</span></td>
				<td width="14%" class="diasemana"><span>J</span></td>
				<td width="14%" class="diasemana"><span>V</span></td>
				<td width="14%" class="diasemana"><span>S</span></td>
				<td width="14%" class="diasemana"><span>D</span></td>
			</tr>';
 
	//Variable para llevar la cuenta del dia actual
	$dia_actual = 1;
 
	//calculo el numero del dia de la semana del primer dia
	$numero_dia = calcula_numero_dia_semana(1,$mes,$ano);
	//echo "Numero del dia de demana del primer: $numero_dia <br>";
 
	//calculo el último dia del mes
	$ultimo_dia = ultimoDia($mes,$ano);
 
	//escribo la primera fila de la semana
	echo "<tr>";
	for ($i=0;$i<7;$i++){
		if ($i < $numero_dia){
			//si el dia de la semana i es menor que el numero del primer dia de la semana no pongo nada en la celda
			echo '<td class="diainvalido"><span></span></td>';
		} else {
			echo '<td class="diavalido" bgcolor="green"><span>' . $dia_actual . '</span></td>';
			$dia_actual++;
		}
	}
	echo "</tr>";
 
	//recorro todos los demás días hasta el final del mes
	$numero_dia = 0;
	while ($dia_actual <= $ultimo_dia){
		//si estamos a principio de la semana escribo el <TR>
		if ($numero_dia == 0)
			echo "<tr bgcolor=''>";
		echo '<td class="diavalido" bgcolor="green"><span>' . $dia_actual . '</span></td>';
		$dia_actual++;
		$numero_dia++;
		//si es el uñtimo de la semana, me pongo al principio de la semana y escribo el </tr>
		if ($numero_dia == 7){
			$numero_dia = 0;
			echo "</tr>";
		}
	}
 
	//compruebo que celdas me faltan por escribir vacias de la última semana del mes
	for ($i=$numero_dia;$i<7;$i++){
		echo '<td class="diainvalido"><span></span></td>';
	}
 
	echo "</tr>";
	echo "</table>";
}

Principal.php
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
31
32
33
34
35
<html>
<head>
	<title>Calendario PHP</title>
	<link rel="STYLESHEET" type="text/css" href="estilo.css">
</head>
 
<body>
<div align="center">
<?php
require ("calendario.php");
 
 
if ($_POST) {
	$mes = $_POST["nuevo_mes"];
	$ano = $_POST["nuevo_ano"];
}elseif ($_GET){
	$mes = $_GET["nuevo_mes"];
	$ano = $_GET["nuevo_ano"];
}else{
	$tiempo_actual = time();
	$mes = date("n", $tiempo_actual);
	$ano = date("Y", $tiempo_actual);
}
if ($mes) {
 
}
 
mostrar_calendario($mes,$ano);
mostrar_calendario($mes,$ano);
mes_pasado();
 
?>
</div>
</body>
</html>

Espero obtener una pista, saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Calendario en PHP

Publicado por xve (6935 intervenciones) el 06/05/2014 20:16:12
Hola, gracias por enviarnos las funciones...

Lo he probado, y he visto un pequeño error en la función ultimoDia(), que no devolvía el valor correcto. he modificado la función para que quede así:
1
2
3
4
function ultimoDia($mes,$ano)
{
    return date("d",(mktime(0,0,0,$mes+1,1,$ano)-1));
}

y ahora me ha funcionado perfectamente


He llamado a la función de esta manera:
1
2
mostrar_calendario(2014,4);
mostrar_calendario(2014,5);

coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Calendario en PHP

Publicado por jmuoz (21 intervenciones) el 06/05/2014 21:42:36
Funciono gracias de antemano, ahora tengo otro pequeño inconveniente, voy a comparar la fecha del calendario con algunas que tengo en una base de datos y si estas coinciden entonces rellenarlas de algun color ejemplo rojo y si no de otro color ejemplo verde, el codigo para consultar lo inserte en una parte del mostar_Calendario:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//Variable para llevar la cuenta del dia actual
	$dia_actual = 1;
 
	//calculo el numero del dia de la semana del primer dia
	$numero_dia = calcula_numero_dia_semana(1,$mes,$ano);
	//echo "Numero del dia de demana del primer: $numero_dia <br>";
 
	//calculo el último dia del mes
	$ultimo_dia = ultimoDia($mes,$ano);
 
	//escribo la primera fila de la semana
	echo "<tr>";
	for ($i=0;$i<7;$i++){
		if ($i < $numero_dia){
			//si el dia de la semana i es menor que el numero del primer dia de la semana no pongo nada en la celda
			echo '<td class="diainvalido"><span></span></td>';
		} else {
			echo '<td class="diavalido" bgcolor="green"><span>' . $dia_actual . '</span></td>';
			$dia_actual++;
		}
	}
	echo "</tr>";
 
	//recorro todos los demás días hasta el final del mes
	$numero_dia = 0;
	while ($dia_actual <= $ultimo_dia){
		//si estamos a principio de la semana escribo el <TR>
		if ($numero_dia == 0)
			echo "<tr bgcolor=''>";
		echo '<td class="diavalido" bgcolor="green"><span>' . $dia_actual . '</span></td>';
		$dia_actual++;
		$numero_dia++;
		//si es el uñtimo de la semana, me pongo al principio de la semana y escribo el </tr>
		if ($numero_dia == 7){
			$numero_dia = 0;
			echo "</tr>";
		}
	}
$conexion = mysqli_connect("localhost","Calendario","5t4r3e2w1q","fechas");
      $consul="SELECT*FROM fecha_prueba";
      $result = mysqli_query($conexion,$consul);
           while ($fila = mysqli_fetch_array($result)){
                  //echo $fila['fecha_prueba'].'<br>'; 
             }
             if ($dia_actual == $fila['fecha_prueba']) {
 
             }
echo '<td class="diavalido" bgcolor="orange"><span>' . $dia_actual . '</span></td>';
          mysqli_close($conexion);
 
	//compruebo que celdas me faltan por escribir vacias de la última semana del mes
	for ($i=$numero_dia;$i<7;$i++){
		echo '<td class="diainvalido"><span></span></td>';
	}
 
	echo "</tr>";
	echo "</table>";
}
Espero puedan darme una pista que estoy haciendo mal, saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar