Ver Mensaje Individual
  #3 (permalink)  
Antiguo 07/08/2014, 10:26
Rro237
 
Fecha de Ingreso: agosto-2009
Mensajes: 45
Antigüedad: 14 años, 8 meses
Puntos: 2
Respuesta: Inconveniente al listar semanas

Ya he dado con la solución xD

Código PHP:
function calcula_semanas_mes($fecha_desde$fecha_hasta){
    
    
$dividefecha explode("-"$fecha_desde);
    
$fecha_desde mktime(000$dividefecha[0], $dividefecha[1], $dividefecha[2]);
    
    
$dividefecha explode("-"$fecha_hasta);          
    
$fecha_hasta mktime(000$dividefecha[0], $dividefecha[1], $dividefecha[2]);
     
    
$segundos $fecha_desde $fecha_hasta;
    
$segundos abs($segundos);
    
$semanas floor($segundos 604800);
    return 
$semanas;
}

function 
numero_semana($anho$mes$dia){

    
$ns strftime("%W"mktime(0,0,0,$mes,$dia,$anho));
    
$ns += 0;
    
$primer_dia_anho getdate(mktime(0,0,0,1,1,$anho));
    if (
$primer_dia_anho["wday"] != 1)
    
$ns += 1;
    return (
$ns);
}

function 
dias_mes($anio$mes){

   if(((
fmod($anio,4)==0) and (fmod($anio,100)!=0)) or (fmod($anio,400)==0)) $dias_febrero=29; else $dias_febrero=28;
   switch(
$mes){
       case 
01$dm=31; break;
       case 
02$dm=$dias_febrero; break;
       case 
03$dm=31; break;
       case 
04$dm=30; break;
       case 
05$dm=31; break;
       case 
06$dm=30; break;
       case 
07$dm=31; break;
       case 
08$dm=31; break;
       case 
8$dm=31; break;
       case 
09$dm=30; break;
       case 
9$dm=30; break;
       case 
10$dm=31; break;
       case 
11$dm=30; break;
       case 
12$dm=31; break;
   }
   return 
$dm;
}

$periodo=$_GET[periodo];
$mes=(int)substr($periodo,0,2);
$anho=(int)substr($periodo,2,4);

$dm=dias_mes($anio$mes);
$fecha_desde=$anho."-".$mes."-01";
$fecha_hasta=$anho."-".$mes."-".$dm;
$fecha_desde2=$mes."-01-".$anho;
$fecha_hasta2=$mes."-".$dm."-".$anho;
$semanas_mes=calcula_semanas_mes($fecha_desde2$fecha_hasta2);
$sem_ini=numero_semana($anho$mes1);
$sem_fin=$sem_ini+$semanas_mes;


$f=$fecha_desde;

for(
$i=$sem_ini$i<=$sem_fin$i++){
    
    if(
$i==$sem_ini){
        
$fecha=date("Y-m-d"strtotime($f));
    }else{
        
$f=date("Y-m-j"strtotime('+1 week',strtotime($f)));
        
$fecha=$f;
    }
    
    
$fecha explode("-",$fecha);
    
$queDiaRepresenta date('w'mktime(0,0,0,$fecha[1],$fecha[2],$fecha[0]));
    
$diaSeleccionar = array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday');
    
$diaRemplazar = array('Lun','Mar','Mie','Jue','Vie','Sab','Dom');
    
$mesSeleccionar = array('January','February','March','April','May','June','July','August','September','October','November','December');
    
$mesRemplazar = array('Ene','Feb','Mar','Abr','May','Jun','Jul','Ago','Sep','Oct','Nov','Dic');
    
    
$n 1;
    
$semana = array();
    while(
$n <= 5){ 
        
$dia = ($fecha[2]-$queDiaRepresenta+$n++);
        
$semana[] = date('l-Y-F-d'mktime(0,0,0,$fecha[1],$dia,$fecha[0]));
    }
    
    foreach(
$semana as $k => $v){
        
$fechaFinal explode("-",$v);
        
$fechaFinal[0] = str_ireplace($diaSeleccionar,$diaRemplazar,$fechaFinal[0]);
        
$fechaFinal[2] = str_ireplace($mesSeleccionar,$mesRemplazar,$fechaFinal[2]);
        
$fechaFinal[3] = (int)$fechaFinal[3];
        echo 
$fechaFinal[0].", ".$fechaFinal[3]." de ".$fechaFinal[2]."<br />";
    }