Cita:
Iniciado por efkruuse
Hola chronos682 gracias por tu tiempo y dedicacion!!
He agregado una comprobacion con if e isset para validar si existe o no el dato, y he solucionado el problema de que el dia comiense como Lunes.
Código PHP:
for ($n = 1; $n <= $num; $n++){
echo "<td>"." ";
if(isset($calendario[$i][$n]) ) {
echo "<center>".date("d", $calendario[$i][$n])."</center>";
}else {
echo " ";
}
echo "</td>";
}
Obtengo el siguiente resultado para:
Lunes 27
Martes 28
Miercoles 29
Algo sucede con los <td> que van disminuyendo, alguna idea?
Yo lo plantearía diferente, yo llenaría el array hasta completar los espacios que hagan falta así siempre serían 5 elementos horizontales por cada elemento vertical en el array de 2 dimensiones. Quedaría así el código:
Código PHP:
Ver original<?php
$semana=1;
//Se comprueba a qué día de la semana corresponde la fecha de inicio
$diasemana = date( 'w', $fechaInicio );
//Si es sábado o domingo automáticamente modifica la fecha de inicio al siguiente Lunes
if ($diasemana == 0)
{
$fechaInicio += 86400;
}
elseif ($diasemana == 6)
{
$fechaInicio += 172800;
}
$diasemana = date( 'w', $fechaInicio );
//Si la fecha de inicio corresponde a un día entre Martes y Viernes
//rellena los espacios del array que hagan falta con guión para completar hasta el Lunes anterior
if ($diasemana > 1 && $diasemana < 6)
{
for($i=1;$i<=$diasemana - 1; $i++)
{
$calendario[$semana][$i] = "-";
}
}
/* avanzamos de a 1 dia; 1 dia ? 86400 segundos */
for($i=$fechaInicio; $i<=$fechaFin; $i+=86400){
/* obtenemos el dia de semana como numero; Domingo = 0, Lunes = 1... Sabado = 6 */
$diasemana = date( 'w', $i );
/* solo agregamos los dias Lunes, Martes, Miercoles, Jueves y Viernes */
if(($diasemana >= 1) && ($diasemana <=5 ))
{
/* obtenemos el calendario en formato numerico STR, [Semana] [Dia Semana] = Fecha */
$calendario[ $semana ][ $diasemana ] = $i;
}
/* imprimir fechas hacia abajo, en formato dia-mes-año */
//echo date('d/m/Y',$calendario[$semana][$diasemana]). "<br>";
/* aumentamos la cantidad de semanas */
if($diasemana == 6){
$semana++;
}
}
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<table border="1">
<thead>
<tr>
<td>Lunes</td>
<td>Martes</td>
<td>Miércoles</td>
<td>Jueves</td>
<td>Viernes</td>
<td>Semana</td>
</tr>
</thead>
<tbody>
<?php
for($i = 1; $i <= count($calendario); $i++) {
echo "<tr>";
$num = count($calendario[$i]); for ($n = 1; $n <= $num; $n++)
{
echo "<td>";
//Determina si el elemento del array es un guion
//Si es guión, coloca un espacio
if ($calendario[$i][$n] != "-")
{
echo "<center>".date("d", $calendario[$i][$n])."</center>"; }
else
{
echo " ";
}
echo "</td>";
}
echo "<td>Semana {$i}</td>"; //Si no quieres que aparezca la semana en la tabla borras esta línea
//y donde dice <td>Semana</td> tambien lo eliminas
echo "</tr>";
}
?>
</tbody>
</table>
</body>
</html>
Lo comenté para que sea más fácil de entenderlo y estudiarlo.