Cita:
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
Iniciado por KarlanKas
![Ver Mensaje](http://static.forosdelweb.com/fdwtheme/images/buttons/viewpost.gif)
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>
Código:
Si encuentran algun erro favor de hacerlo saber xD /*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 };