Foros del Web » Programando para Internet » PHP »

Loop en fechas como mostrar dias hasta el numero 31

Estas en el tema de Loop en fechas como mostrar dias hasta el numero 31 en el foro de PHP en Foros del Web. Hola a tod@s! Estoy intentando hacer un calendario con php que quede algo asi como esto: _________________________________________________ | $year | _________________________________________________ | $mes | $mes ...
  #1 (permalink)  
Antiguo 30/04/2012, 06:43
 
Fecha de Ingreso: mayo-2004
Mensajes: 102
Antigüedad: 20 años, 6 meses
Puntos: 5
Pregunta Loop en fechas como mostrar dias hasta el numero 31

Hola a tod@s!
Estoy intentando hacer un calendario con php que quede algo asi como esto:



_________________________________________________
| $year |
_________________________________________________
| $mes | $mes | $mes|
_________________________________________________
|$dias|$dias|$dias|$dias|$dias|$dias|$dias|$dias|$ dias|$dias |
__________________________________________________

Pero el problema nace en los dias, no se bien como hacerlo, aqui pongo la parte de codigo en la que me he quedado bloqueado, espero que puedan ayudarme, desde ya muchas gracias!

Código PHP:
//Años abre
for ($year date("Y"); $year <= date("Y")+1$year++) {
    
    echo 
"<div id=\"wrap\" style=\"overflow:auto;width:1600px;\">";
    echo 
"<div id=\"year\" style=\"display:block-inline; width:800px;\">";
    echo 
$year;
    echo 
"</div>";
        
    
//Meses abre
    
for ($month date("m"); $month <= 12$month++) {
    if(
strlen($month)=='1')    {    echo "0".$month;    echo "<br>";}else{    echo $month;echo "<br>";}
    
//Dias abre
    
for ($day date("d"); $day <= 31$day++) {
    
    echo 
$day."<br>";
    
//dias cierra
    
}
    
//Meses cierra
    
}
    
    
    echo 
"</div>";
    
    
    
    
//Años cierra    

__________________
Bruno Quintana
  #2 (permalink)  
Antiguo 30/04/2012, 06:47
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 13 años, 4 meses
Puntos: 181
Respuesta: Loop en fechas como mostrar dias hasta el numero 31

Cita:
Pero el problema nace en los dias, no se bien como hacerlo, aqui pongo la parte de codigo en la que me he quedado bloqueado, espero que puedan ayudarme, desde ya muchas gracias!
¿Y cual es la duda en concreto?
__________________
Blog de humor http://elcuasatar.net63.net/
  #3 (permalink)  
Antiguo 30/04/2012, 06:56
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 16 años, 3 meses
Puntos: 139
Respuesta: Loop en fechas como mostrar dias hasta el numero 31

Para obtener el total de dia de una fecha lo pueste hacer pasandole el parametro t a date().

Ej.
Código PHP:
Ver original
  1. echo date('t',strtotime('2012-04-30'));


Saludos.
  #4 (permalink)  
Antiguo 30/04/2012, 07:02
 
Fecha de Ingreso: mayo-2004
Mensajes: 102
Antigüedad: 20 años, 6 meses
Puntos: 5
Respuesta: Loop en fechas como mostrar dias hasta el numero 31

La duda en concreto es que ese codigo retorna esto:


2012
04
30
31
05
30
31

06
30
31

07
30
31

08
30
31

09
30
31

10
30
31

11
30
31

12
30
31


2013
04
30
31
05
30
31

06
30
31

07
30
31

08
30
31

09
30
31

10
30
31

11
30
31

12
30
31


Envez de retornar todos los dias de cada mes, que es lo que me gustaria tener.
__________________
Bruno Quintana
  #5 (permalink)  
Antiguo 30/04/2012, 07:12
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 13 años, 4 meses
Puntos: 181
Respuesta: Loop en fechas como mostrar dias hasta el numero 31

Pues para tener todos los dias del mes solo hace falta tener un comparativo en donde dividas los meses que tienen 30 y 31 dias. Entonces si el mes tiene 30 dias que haga el ciclo de 1 a 30. Igual para el mes de febrero debes determinar si el año en curso es bisiesto para asignarle 28 0 29 dias.

Segun lo que veo en tu función estas es tomando el día actual y por tanto solo tomarías del dia actual al 31 . Ademas lo estas anidando dentro de otros for y por eso es que te salen esas incoherencias. Para generar bien los dias saca esos for anidados dentro del mes.
__________________
Blog de humor http://elcuasatar.net63.net/
  #6 (permalink)  
Antiguo 30/04/2012, 07:13
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 16 años, 3 meses
Puntos: 139
Respuesta: Loop en fechas como mostrar dias hasta el numero 31

Algo como esto no?

Código PHP:
Ver original
  1. $year = 2012;
  2.     for ($i=1;$i<=12;$i++) {
  3.  
  4.    
  5.         $mes = str_pad($i,2,0,STR_PAD_LEFT);
  6.        
  7.             echo "<b>Mes ".$mes."</b><br />";
  8.            
  9.             $total_dias = date('t',strtotime($year."-".$mes."-"."01"));
  10.            
  11.             $dias = "";
  12.             for($a = 1;$a <= $total_dias; $a++){
  13.                
  14.                 $dias .= str_pad($a,2,0,STR_PAD_LEFT).",";
  15.             }
  16.            
  17.             echo trim($dias,",");
  18.             echo "<br /><br />";
  19.  
  20.     }

Saludos.
  #7 (permalink)  
Antiguo 30/04/2012, 07:25
 
Fecha de Ingreso: mayo-2004
Mensajes: 102
Antigüedad: 20 años, 6 meses
Puntos: 5
Respuesta: Loop en fechas como mostrar dias hasta el numero 31

gjx2 Muchas gracias! Lo he modificado para obtener como lo queria yo, muchas gracias de verdad, dejo la modificacion por si a alguien le sirve:

for ($year = date("Y"); $year <= date("Y")+1; $year++) {
if($year==date("Y")){

$mes=date("m");}else{$mes='1';}



for ($i=$mes;$i<=12;$i++) {


$mes = str_pad($i,2,0,STR_PAD_LEFT);

echo "<b>Mes ".$mes."</b><br />";

$total_dias = date('t',strtotime($year."-".$mes."-"."01"));

$dias = "";
for($a = 1;$a <= $total_dias; $a++){

$dias .= str_pad($a,2,0,STR_PAD_LEFT).",";
}

echo trim($dias,",");
echo "<br /><br />";

}


}
__________________
Bruno Quintana

Etiquetas: dias, loop, numero
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 07:53.