Me encontraba en el dilema de averiguar el numero de la semana del año de una fecha dada mediante javascript, el motivo es lo de menos, buscando aqui y alla, encontre este post en este mismo foro ...
Cita:
Iniciado por KarlanKas
Había un problema. Ya está:
Código:
<script>
anado=[2,1,7,6,5,4,3];
function saberSemana(d,m,a){
fecha=new Date(a,0,1);
primerDiaDelAno=anado[fecha.getDay()];
fecha=new Date(a,0,primerDiaDelAno);
fecha2=new Date(a,m,(d+primerDiaDelAno));
tiempopasado=fecha2-fecha;
semanas=Math.floor(tiempopasado/1000/60/60/24/7);
if(semanas==0){semanas=52}
alert(semanas)
}
saberSemana(3,1,2008)
</script>
Lo probe para ver si me funcionaria y encontre un pequeño error, al darle como valor de fecha (1,0,2007) es decir 01 de Enero de 2007 me arrojaba como valor de semana 52 entiendase del año anterior, 2006, cosa no tan cierta pues el 01/01/2007 cae lunes y por tanto es la 1º semana de dicho año, luego de checar por un buen rato el script encontre el error y aqui posteo la solucion con alguno agregados propios, por si alguien se ve en el mismo problema
Código:
/*A esta funcion se le pasa el parametro en formato fecha dd/mm/yyyy o dd-mm-yyyy ambos son aceptados*/
function semanadelano($fecha){
$const = [2,1,7,6,5,4,3]; // Constantes para el calculo del primer dia de la primera semana del año
if ($fecha.match(/\//)){ $fecha = $fecha.replace(/\//g,"-",$fecha); }; //Permite que la fecha pasada a la funcion este separada por "/"
$fecha = $fecha.split("-"); //divide la fecha en trozos
$dia = eval($fecha[0]);
$mes = eval($fecha[1]);
if ($mes!=0) { $mes--; }; //convierte el mes a formato javascript 0=enero
$ano = eval($fecha[2]);
$dia_pri = new Date($ano,0,1);
$dia_pri = $dia_pri.getDay(); //Obtiene el dia de la semana del 1 de enero
$dia_pri = eval($const[$dia_pri]); //Obtiene el valor de la constante
$tiempo0 = new Date($ano,0,$dia_pri); //establecemos la fecha del primer dia de la semana del año
$dia = ($dia+$dia_pri); //Sumamos el valor de la constante a la fecha ingresada para mantener los lapsos de tiempo
$tiempo1 = new Date($ano,$mes,$dia); //Obtenemos la fecha con la que operaremos
$lapso = ($tiempo1 - $tiempo0) //Restamos ambas fechas y obtenemos una marca de tiempo
$semanas = Math.floor($lapso/1000/60/60/24/7); //Dividimos para obtener el numero de semanas
if ($dia_pri == 1) { $semanas++; }; // Si el 1 de enero es lunes le sumamos 1 a la semana caso contrarios nos daria 0 el calculo y nos la presentaria como semana 52
if ($semanas == 0) { $semanas=52; $ano--; }; //Establecemos que si el resultado de semanas es 0 lo cambie a 52 y reste 1 al año
if ($ano < 10) { $ano = '0'+$ano; }; //pura estetica por si se usan años de 2 cifras
alert($semanas+" - "+$ano); //arroja el resultado, cambien esta linea a su conveniencia
};
Si encuentran algun erro favor de hacerlo saber xD