Definir semanas

=')) date_default_timezone_set('America/Mexico_City'); /* http://www.timeanddate.com/calendar/custom.html?year=2000&country=16&lang=es&lang2=en&hol=4194329&wno=1 http://es.wikipedia.org/wiki/Calendario_gregoriano La primera semana del año, la número 01, es la que contiene el primer jueves de enero. Las semanas de un año van de la 01 a la 52, salvo que el año termine en jueves, o bien en jueves o viernes si es bisiesto, en cuyo caso se añade una semana más: la 53. * Mes: periodo de 30 ó 31 días, salvo para Febrero que tiene 28 días en un año común, y 29 días en un año bisiesto. */ // Definir cuantas semanas tiene un año for($anio = 2000; $anio < 2011; ++$anio) { $semanas = date('W',mktime(0,0,0,12,28,$anio)); $bisiesto = date('L',mktime(0,0,0,1,1,$anio)); $primerDia = date('w',mktime(0,0,0,1,1,$anio)); switch($primerDia) { case 0: $primerDiaAnio = 'Domingo'; break; case 1: $primerDiaAnio = 'Lunes'; break; case 2: $primerDiaAnio = 'Martes'; break; case 3: $primerDiaAnio = 'Miercoles'; break; case 4: $primerDiaAnio = 'Jueves'; break; case 5: $primerDiaAnio = 'Viernes'; break; case 6: $primerDiaAnio = 'Sabado'; break; } echo "Año : $anio
"; echo 'Bisiesto : '; echo ($bisiesto == 1) ? 'Si
' : 'No
'; echo "Numero de semanas : $semanas
"; echo "Primer dia del año : $primerDiaAnio ($primerDia)
"; echo "timeandate.com$anio.jpg"; } echo '
'; $anio = '2010'; // Deben ser 4 digitos $semana = '37'; // Deben ser 2 digitos echo "Año : $anio Semana : $semana
"; // Para PHP 5.1 y superior if (version_compare(PHP_VERSION, '5.1.0', '>=')) { echo 'PHP 5.1 y suerior '; $formatoInicia = $anio . 'W' . $semana; // ejemplo: "2006W37" $formatoTermina = $anio . 'W' .$semana . '7'; // ejemplo "2006W377" // Lunes $inicia = date('d/m/Y',strtotime($formatoInicia)); // Domingo $termina = date('d/m/Y',strtotime($formatoTermina)); echo "La semana # $semana inicia el $inicia y termina el $termina
"; } // Para PHP 5.0 e inferior // Definir timestamp de inicio del año $inicioAnio = mktime(0,0,0,1,1,$anio); /*Definir diferencia en dias para obtener el lunes de la primer semana del año La diferencia es con respecto al primer dia del año. Si el primer dia del año es sabado, hay que "avanzar" 2 dias para el primer lunes Si el primer dia del año es miercoles, hay que "retroceder" 2 dias para el primer lunes 2001 1 de enero es es Lunes La semana # 1 inicia el 01/01/2001 y termina el 07/01/2001 Hay 0 dias de diferencia entre el primer dia del año y el primer lunes de año 2002 1 de enero es es Martes La semana # 1 inicia el 31/12/2001 y termina el 06/01/2002 Hay -1 dia de diferencia entre el primer dia del año y el lunes de la primer semana del año Al Martes le restamos 1 dia para llegar al Lunes de la primer semana del año 2003 1 de enero es es Miercoles La semana # 1 inicia el 30/12/2002 y termina el 05/01/2003 Hay -2 dias de diferencia entre el primer dia del año y el lunes de la primer semana del año Al Miercoles le restamos 2 dias para llegar al Lunes de la primer semana del año 2004 1 de enero es es Jueves La semana # 1 inicia el 29/12/2003 y termina el 04/01/2004 Hay -3 dias de diferencia entre el primer dia del año y el lunes de la primer semana del año Al Jueves le restamos 3 dias para llegar al Lunes de la primer semana del año 2010 1 de enero es es Viernes La semana # 1 inicia el 04/01/2010 y termina el 10/01/2010 Hay +3 dias de diferencia entre el primer dia del año y el lunes de la primer semana del año Al Viernes le sumamos 3 dias para llegar al Lunes de la primer semana del año 2005 1 de enero es es Sabado La semana # 1 inicia el 03/01/2005 y termina el 09/01/2005 Hay +2 dias de diferencia entre el primer dia del año y el lunes de la primer semana del año Al sabado le sumamos 2 dias para llegar al Lunes de la primer semana del año 2006 1 de enero es es Domingo La semana # 1 inicia el 02/01/2006 y termina el 08/01/2006 Hay +1 dia de diferencia entre el primer dia del año y el lunes de la primer semana del año Al domingo le sumamos 1 dia para llegar al Lunes de la primer semana del año */ $lunesPrimerSemanaAnio = (11 - date('w', $inicioAnio)) % 7 - 3; // date('w') Nos da el dia de la semana (0 -> Domingo a 6 -> Sabado) /* Definir timestamp del lunes de la semana strtotime('tantas weeks tantos days', $inicioAnio); */ $iniciaTimestamp = strtotime(($semana - 1) . ' weeks ' . $lunesPrimerSemanaAnio .' days', $inicioAnio); // Definir timestamp del domingo de la semana $terminaTimestamp = strtotime('next Sunday', $iniciaTimestamp); $inicia = date('d/m/Y',$iniciaTimestamp); $termina = date('d/m/Y',$terminaTimestamp); echo "PHP 5.0 e inferior La semana # $semana inicia el $inicia y termina el $termina
"; echo "\$inicioAnio = $inicioAnio | \$lunesPrimerSemanaAnio = $lunesPrimerSemanaAnio | \$iniciaTimestamp = $iniciaTimestamp | \$terminaTimestamp = $terminaTimestamp
"; echo "(11 - date('w', \$inicioAnio)) % 7 - 3
"; echo "date('w', \$inicioAnio) = ". date('w', $inicioAnio) . "
"; echo "(11 - " . date('w', $inicioAnio) . ") % 7 = ". (11 - date('w', $inicioAnio)) % 7 . "
"; $paso = (11 - date('w', $inicioAnio)) % 7 - 3; echo "(11 - date('w', \$inicioAnio)) % 7 - 3 = " . $paso . "
"; ?>