| Recommend this page to a friend! |
| Week Date Range | > | All threads | > | Nuevo método | > | (Un) Subscribe thread alerts |
| |||||||||||||
Hola Julián,
Gracias por tu clase, la he usado en uno de mis proyectos exitosamente... :) Copio aquí la clase completa con los cambios que hice para poder calcular el rango de fechas pero para fechas en formato europeo (Semana de Lunes a Domingo). Simplemente cree un nuevo método que se llama retornarRangoDiasxSemanaUe y modifiqué mínimamente los cálculos. Para calcular correctamente el rango, he tenido que modificar el contador $sem que en tu versión empezaba a contar desde "2" y que he modificado para que empiece en "1" pues ocasionaba que el método entregase un número de semana incorrecto, concretamente, uno menos al indicado por el calendario. Me parece que el método original, para calcular el rango en formato americano tiene el mismo problema mas no sé si se trate de una diferencia por configuración de horario/reloj (Yo estoy en GMT+1, España), o un error debido a la antigüedad del código (También he cambiado la declaración de algunas variables pues generaban 'warnings'); si haces un contraste con un Diffuse o alguna aplicación de estas notarás rápidamente cuáles son. Ojalá te sirvan los comentarios que he hecho; si sí, avisame ;) Saludos y muchas gracias! Aquí la clase modificada --------------------> <?php /*! Class: rangoDiasSemana Version : 1.0 Released: 07-27-2006 Author: jaaristizabal <[email protected]> **** usage: : : $año = 2005; $semana = 35; $fechas = retornarRangoDiasxSemana($año, $semana); print "<br>La semana ".$semana." Inicia el día ".$fechas[1]." y termina el día ".$fechas[2]; : : License: The GNU General Public License (GPL) opensource.org/licenses/gpl-license ...For any suggestions or bug report please contact me : [email protected] !*/ class rangoDiasSemana { function rangoDiasSemana() { } // End of Constructor // Retornar el rango de días que abarca una semana dada function retornarRangoDiasxSemana($anno, $semana) { $diaAño = 0; $diaIni = 0; // Determinar el día del inicio del año $anno = date('Y',mktime(0, 0, 0, 1, 1, $anno)); // 0 para el domingo a 6 para el sábado $diaInicial = date('w',mktime(0, 0, 0, 1, 1, $anno)); // Establecer los datos iniciales para hacer el cálculo $finSemana = 7-$diaInicial; $diaAño = $diaAño+$finSemana; $diaIni = date('Y/m/d',mktime(0, 0, 0, 1, $diaIni+1, $anno)); $diaFin = date('Y/m/d',mktime(0, 0, 0, 1, $finSemana, $anno)); // Realizar el ciclo hasta la semana deseada if($semana<54) { for($sem=1;$sem<=$semana;$sem++) { $diaIni = $diaAño + 1; $diaFin = $diaIni + 6; $diaAño = $diaFin; $diaIni = date('Y/m/d',mktime(0, 0, 0, 1, $diaIni, $anno)); $diaFin = date('Y/m/d',mktime(0, 0, 0, 1, $diaFin, $anno)); } } $fechas = array($anno, $diaIni, $diaFin); return $fechas; } // End of funtion retornarRangoDiasxSemana // Retornar el rango de días que abarca una semana dada en formato europeo: Lunes a Domingo... function retornarRangoDiasxSemanaUe($anno, $semana) { $diaAño = 0; $diaIni = 0; // Determinar el día del inicio del año $anno = date('Y',mktime(0, 0, 0, 1, 1, $anno)); // 0 para el domingo a 6 para el sábado $diaInicial = date('w',mktime(0, 0, 0, 1, 1, $anno)); // Establecer los datos iniciales para hacer el cálculo $finSemana = 8-$diaInicial; $diaAño = $diaAño+$finSemana; $diaIni = date('Y/m/d',mktime(0, 0, 0, 1, $diaIni+1, $anno)); $diaFin = date('Y/m/d',mktime(0, 0, 0, 1, $finSemana, $anno)); // Realizar el ciclo hasta la semana deseada if($semana<54) { for($sem = 1;$sem<=$semana;$sem++) { $diaIni = $diaAño + 1; $diaFin = $diaIni + 6; $diaAño = $diaFin; $diaIni = date('Y/m/d',mktime(0, 0, 0, 1, $diaIni, $anno)); $diaFin = date('Y/m/d',mktime(0, 0, 0, 1, $diaFin, $anno)); } } $fechas = array($anno, $diaIni, $diaFin); return $fechas; } // End of funtion retornarRangoDiasxSemana } // End of Class ?> |
info at phpclasses dot org.
