Foros del Web » Programando para Internet » PHP »

recorrer dias del año

Estas en el tema de recorrer dias del año en el foro de PHP en Foros del Web. Muy buenas... les comento lo que quiero hacer: Necesito que a partir de una fecha dada, por ejemplo: Martes 04-01-2011 me saque todas las fechas ...
  #1 (permalink)  
Antiguo 20/06/2011, 05:43
Avatar de fbedia88  
Fecha de Ingreso: enero-2011
Ubicación: Santander
Mensajes: 83
Antigüedad: 13 años, 10 meses
Puntos: 20
recorrer dias del año

Muy buenas... les comento lo que quiero hacer:

Necesito que a partir de una fecha dada, por ejemplo: Martes 04-01-2011 me saque todas las fechas del martes del año... seria tan sencillo como ir sumando 7 dias...

04-01-2011
11-01-2011
18-01-2011
25-01-2011
02-02-2011
09-02-2011
16-02-2011
.....
.......


Me podrian orientar o dar algun consejo de como hacerlo???


He estado intentando desarrollarlo desde cero, pero me he dado cuenta que son bastantes cosas las que hay que controlar....

Lo estoy haciendo asi:
Código:
<?php


$dia_excepcion = 3; //de lunes a domingo (1,2,3,4,5,6,7)

//dependiendo dia, inicializo la variable a la correspondiente con el calendario de enero del 2011
switch ($dia_excepcion) {
    case '1':
        $dia='03';
        break;
	case '2':
        $dia='04';
        break;
	case '3':
        $dia='05';
        break;
	case '4':
        $dia='06';
        break;
	case '5':
        $dia='07';
        break;
	case '6':
        $dia='01';
        break;
	case '7':
        $dia='02';
        break;
}

$mes = 01;
$dias_mes = array(31,28,31,30,31,30,31,31,30,31,30,31);

while ($mes <= 12)
{
	while ($dia <= $dias_mes[$mes])
	{

	$fecha_inicio = "$dia-$mes-2011 00:00:00";
	$fecha_fin = "$dia-$mes-2011 23:50:00";

	$dia = $dia + 7;
	
	echo "$fecha_inicio ------------- $fecha_fin <br>";

	}
	
	$mes = $mes + 1;

}

?>
pero tengo que controlar que cuando el $dia pase del $dias_mes empieze otra vez desde el dia 1.... aparte de que este codigo solo me serviria para el 2011.... etc...

Seguro que tiene que haber alguna forma mas facil de hacerlo de como lo he planteado en mi codigo...

Saludos
  #2 (permalink)  
Antiguo 20/06/2011, 06:13
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: recorrer dias del año

Puedes utilizar mktime. http://www.ignside.net/man/php/fechas.php, adem´as p´aste por el manual de PHP donde todos estos temas est´an explicados con ejemplos, salu2
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 20/06/2011, 07:18
Avatar de solhdeck  
Fecha de Ingreso: junio-2011
Mensajes: 87
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: recorrer dias del año

Yo simplemente te daré una pista, y algunos consejos (no tengo tiempo como para ponerme a desarrollarte la solución completa):
La siguiente función
Código PHP:
date(w,mktime(0,0,0,$mes,$dia,$anio
(sustituyendo las variables mes, dia y anio por sus valores respectivos) te devuelve 0 si es domingo, 1 si es lunes, 2 si es martes... 6 si es sábado.

Por lo tanto, ya tienes el día de la semana que es.
Luego... aunque no fuera práctico, yo sumaría a la variable día de 1 en 1 y comprobaría si ese día coincide con el que quiero ver y si es así lo muestro.
Cuando día llegue a 31, 28, 31, 30... según el mes, subes un mes, y cuando mes es mayor que 12, cortas el bucle
(yo lo haría con un for dentro de otro).

El resto... te veo capaz de hacerlo bien por ti mismo XD

EDITO:
De hecho... ahora que veo que tienes un while dentro de otro, te sirve el código que tienes cambiando un poco

Última edición por solhdeck; 20/06/2011 a las 07:46
  #4 (permalink)  
Antiguo 21/06/2011, 02:24
Avatar de fbedia88  
Fecha de Ingreso: enero-2011
Ubicación: Santander
Mensajes: 83
Antigüedad: 13 años, 10 meses
Puntos: 20
De acuerdo Respuesta: recorrer dias del año

Cita:
Iniciado por solhdeck Ver Mensaje
Yo simplemente te daré una pista, y algunos consejos (no tengo tiempo como para ponerme a desarrollarte la solución completa):
La siguiente función
Código PHP:
date(w,mktime(0,0,0,$mes,$dia,$anio
(sustituyendo las variables mes, dia y anio por sus valores respectivos) te devuelve 0 si es domingo, 1 si es lunes, 2 si es martes... 6 si es sábado.

Por lo tanto, ya tienes el día de la semana que es.
Luego... aunque no fuera práctico, yo sumaría a la variable día de 1 en 1 y comprobaría si ese día coincide con el que quiero ver y si es así lo muestro.
Cuando día llegue a 31, 28, 31, 30... según el mes, subes un mes, y cuando mes es mayor que 12, cortas el bucle
(yo lo haría con un for dentro de otro).

El resto... te veo capaz de hacerlo bien por ti mismo XD

EDITO:
De hecho... ahora que veo que tienes un while dentro de otro, te sirve el código que tienes cambiando un poco
Interesante... creo que con lo que me acabas de decir podría desarrollarlo. Voy a ponerme con ello y ya les dire si lo consigo les posteo la solucion ;)

Gracias tambien a ti #repara2, le echare un vistazo al link.

Saludos.
  #5 (permalink)  
Antiguo 21/06/2011, 04:10
Avatar de fbedia88  
Fecha de Ingreso: enero-2011
Ubicación: Santander
Mensajes: 83
Antigüedad: 13 años, 10 meses
Puntos: 20
Respuesta: recorrer dias del año

Bueno, ya conseguí hacerlo!!!

Les posteo la solución:

Código PHP:
<?php
/*
-------------------------------------------------------------------------------------
|                                                                                    |
|    Este codigo printa las fechas del año 2011 de un determinado dia por ejemplo    |
|    lunes (1), martes (2), viernes (5), sabado (6)...etc.                            |
|                                                            thanks (forosdelweb)    |
-------------------------------------------------------------------------------------
*/

$dia_semana 2//establece un dia: lunes=1, martes=2, miercoles=3 .... etc

// Esta funcion devuelve el dia de la semana
function calcula_numero_dia_semana($dia,$mes,$ano){ 
    
$numerodiasemana date('w'mktime(0,0,0,$mes,$dia,$ano)); 
    if (
$numerodiasemana == 0)
    {
        
$numerodiasemana 7;
    }
    return 
$numerodiasemana
}  


$mes 1//para comenzar a printar desde enero...
$ano 2011;

$dias_mes_2011 = array(1,31,28,31,30,31,30,31,31,30,31,30,31); //en la posicion 1 del array puede ir cualquier numero ya que no se usa dicha posicion.

//asigno al dia, el numero correspondiente con el calendario del año 2011 del dia de la semana dado.
switch ($dia_semana) {
    case 
'1':
        
$dia='3';
        break;
    case 
'2':
        
$dia='4';
        break;
    case 
'3':
        
$dia='5';
        break;
    case 
'4':
        
$dia='6';
        break;
    case 
'5':
        
$dia='7';
        break;
    case 
'6':
        
$dia='1';
        break;
    case 
'7':
        
$dia='2';
        break;
}

//mientras que el mes es igual a 12...
while ($mes <= 12)
{
    
//mientras que el dia no pase de los del mes... voy sumando 7
    
while ($dia <= $dias_mes_2011[$mes])
    {
        echo 
"$dia-$mes-$ano <br>";
        
$dia $dia 7;
    }
    
//si el dia a superado a los dias del mes, calculo el dia del mes siguiente con una simple resta...
    
if ($dia $dias_mes_2011[$mes])
    {
        
$diferencia $dia $dias_mes_2011[$mes];
        
$dia $diferencia;
    }
    
    echo 
"<br>";
    
$mes $mes +1;
}

?>
En este caso, la variable $dia_semana es igual a 2, por lo tanto muestra todos los martes del año.

Este codigo muestra en pantalla lo siguiente:

Código:
4-1-2011 
11-1-2011 
18-1-2011 
25-1-2011 

1-2-2011 
8-2-2011 
15-2-2011 
22-2-2011 

1-3-2011 
8-3-2011 
15-3-2011 
22-3-2011 
29-3-2011 

5-4-2011 
12-4-2011 
19-4-2011 
26-4-2011 

3-5-2011 
10-5-2011 
17-5-2011 
24-5-2011 
31-5-2011 

7-6-2011 
14-6-2011 
21-6-2011 
28-6-2011 

5-7-2011 
12-7-2011 
19-7-2011 
26-7-2011 

2-8-2011 
9-8-2011 
16-8-2011 
23-8-2011 
30-8-2011 

6-9-2011 
13-9-2011 
20-9-2011 
27-9-2011 

4-10-2011 
11-10-2011 
18-10-2011 
25-10-2011 

1-11-2011 
8-11-2011 
15-11-2011 
22-11-2011 
29-11-2011 

6-12-2011 
13-12-2011 
20-12-2011 
27-12-2011

Bueno, espero que si alguien se ve en mi misma situacion esto le sirva de ayuda!!

He comentado un poco el code para que lo entiendan mejor....

Cualquier cosa me dicen por aca!!

Un saludo y gracias forosdelweb.

Etiquetas: año, dias, recorrer
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 13:45.