Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/06/2009, 16:02
Avatar de NeoCesar
NeoCesar
 
Fecha de Ingreso: julio-2008
Mensajes: 1
Antigüedad: 16 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