Tema: fechas
Ver Mensaje Individual
  #4 (permalink)  
Antiguo 08/07/2007, 17:41
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 7 meses
Puntos: 45
Re: fechas

Hola:


Me aburría un poco y me ha apetecido hacer una implementación para años bisiestos.

Resulta que este año 2007 no es un año bisiesto, luego 28/02/2007 es válido, pero 29/02/2007 no existe. El 2008 en cambio sí que es bisiesto, y 29/02/2008 sí es válido. Si le sumamos una unidad al año tenemos 29/02/2009, la cual es una fecha inválida. Debería retornar 01/03/2009:

Código:
// redefinimos el método toString del objeto Date para que nos lo ponga bonito
Date.prototype.toString = function(sep) {
	var dia = this.getDate();
	if(dia<10) dia = "0"+dia;
	var mes = this.getMonth()+1;
	if(mes<10) mes = "0"+mes;
	var anyo = this.getYear();
	if(sep==undefined) sep = "/";
	return dia+sep+mes+sep+anyo;
}

//nos captura el dia, el mes y el año en un String de formato dd/mm/aaaa
var patronFecha = /^(\d{2})\/(\d{2})\/(\d{4})$/;

// Llamada funcionSumarAnyo(dd/mm/aaaa, dd, mm, aaaa) devuelve una cadena con un año más de la fecha dada. El primer parámetro es omitido
var funcionSumarAnyo =  function(todo,dia,mes,anyo) { 
	mes = parseInt(mes)-1;
	anyo = parseInt(anyo)+1;
	// new Date(año, mes, día);
	var nuevaFecha = new Date(anyo, mes, dia);
	return nuevaFecha.toString("/");
}

// 29/02/2008 es válido porque 2008 es bisiesto
var fecha = "29/02/2008";
// si le sumamos un año no debería dar 29/02/2009, eso es inválido. Debería retornar 01/03/2009 que es cuando realmente ha pasao un año.
var nuevaFecha = fecha.replace(patronFecha,funcionSumarAnyo);
document.write( fecha +" más un año es "+nuevaFecha );
No sé si todo esto es necesario, pero venía a cuento con el hilo, y aquí se queda posteado.


Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.