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 . "
";
?>