Foros del Web » Programando para Internet » Javascript »

Calculo del Numero de Semana del Año

Estas en el tema de Calculo del Numero de Semana del Año en el foro de Javascript en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 19/06/2009, 16:02
Avatar de NeoCesar  
Fecha de Ingreso: julio-2008
Mensajes: 1
Antigüedad: 15 años, 9 meses
Puntos: 0
Calculo del Numero de Semana del Año

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 Ver Mensaje
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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:43.