Foros del Web » Programando para Internet » Javascript »

Sumar días a fecha actual

Estas en el tema de Sumar días a fecha actual en el foro de Javascript en Foros del Web. Hola, necesito hacer un script que valide una fecha introducida por un cliente, es decir, el cliente pone una fecha deseada de entrega del producto, ...
  #1 (permalink)  
Antiguo 14/07/2008, 06:36
 
Fecha de Ingreso: mayo-2008
Mensajes: 5
Antigüedad: 15 años, 11 meses
Puntos: 0
Sumar días a fecha actual

Hola, necesito hacer un script que valide una fecha introducida por un cliente, es decir, el cliente pone una fecha deseada de entrega del producto, en un formulario, y el script compruebe que esa fecha es 30 días mayor que la fecha actual.

He hecho el siguiente script, pero no me funciona, y no sé por qué. Algún buen samaritano que me eche una mano???. Gracias.

<script>
function validaFecha(){

//calculo la fecha de hoy
hoy=new Date()
//alert(hoy)
//calculo la fecha que recibo
var fecha = document.formulario.fecha;
//La descompongo en un array
var array_fecha = fecha.split("/")
//si el array no tiene tres partes, la fecha es incorrecta
if (array_fecha.length!=3)
alert("Formato de fecha incorrecto.")
return false
//compruebo que los ano, mes, dia son correctos
var ano
ano = parseInt(array_fecha[2]);
if (isNaN(ano))
alert("Formato de fecha incorrecto.")
return false

var mes
mes = parseInt(array_fecha[1]);
if (isNaN(mes))
alert("Formato de fecha incorrecto.")
return false

var dia
dia = parseInt(array_fecha[0]);
if (isNaN(dia))
alert("Formato de fecha incorrecto.")
return false

//si el año de la fecha que recibo solo tiene 2 cifras hay que cambiarlo a 4
if (ano<=99)
ano +=1900

//resto los años de las dos fechas
var diferenciaAnos=hoy.getYear()- ano ;
//resto los meses de las dos fechas
var diferenciaMeses=hoy.getMonth()+1- mes
//resto los dias de las dos fechas
var diferenciaDias=hoy.getDate()- dia

if (diferenciaAnos<0)
alert ("Error Año")
document.formulario.fecha.focus()
return false;
else
{if (diferenciaMeses<0)
return false
else
{if (diferenciaDias<30)
return false
else
return true}}
  #2 (permalink)  
Antiguo 14/07/2008, 08:32
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Sumar días a fecha actual

Lo que puedes hacer es restar las dos fechas usando getTime(), con lo que obtendrás la diferencia en milisegundos, haciendo un par de cálculos obtendrás la diferencia en días y podrás comprobar si es mayor que 30.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 14/07/2008, 08:39
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Respuesta: Sumar días a fecha actual

Hola pedro34:

Código PHP:
//si el año de la fecha que recibo solo tiene 2 cifras hay que cambiarlo a 4
if (ano<=99)
ano +=1900

//resto los años de las dos fechas
var diferenciaAnos=hoy.getYear()- ano 
¿Qué ocurre si el ano="07"? ¿Se queda en 1907? Es recomendable usar getFullYear() ya que no sabemos con seguridad si el navegador devolverá 2004, 4 o 104 en getYear().

¿Qué ocurre si hoy es 16 de diciembre de 2007 y el cliente indica 7 de enero de 2008? En realidad sólo hay 22 días de diferencia, pero en tu script nos diría que hay de diferencia un año ("Error Año").

Creo que hay un post en las faq para saber la diferencia entre dos fechas (creo que se llama restar fechas), te vendría bien para saber la cantidad de tiempo entre dos fechas conocidas.


Saludos.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #4 (permalink)  
Antiguo 20/07/2008, 06:46
 
Fecha de Ingreso: mayo-2008
Mensajes: 5
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Sumar días a fecha actual

Hola chicos, he intentado retocar el script a partir de vuestros consejos, pero como soy tan principiante en esto...todavía no sé como hacerlo funcionar! Espero que alguno de vosotros pueda hacerlo, se lo agradecería muchísimo.

Esta vez pongo el formulario.


<html>
<head>
<script>
function validaFecha()
{
var hoy= new Date ()

var cadenaFecha = document.formulario.fecha.value
var array_fecha = cadenaFecha.split("/")

var anio = parseInt(array_fecha[2]);
var mes = parseInt(array_fecha[1]);
var dia = parseInt(array_fecha[0]);

var fechaDeseada= new Date (dia,mes,anio)


var diferencia = fechaDeseada.getTime() - hoy.getTime()
var dias = Math.floor(diferencia / (1000 * 60 * 60 * 24))

if (dias>30)
return true
else
alert("Sólo servimos en un plazo superior a un mes.Introduzca una fecha posterior")
return false
}
</script>
</head>

<body>
<form id="formulario" name="formulario" method="post" action="">
<input type="text" name="fecha" />
<input type="submit" name="Submit" value="Enviar" onsubmit= "return validaFecha()" />
</form>
</body>
</html>

Hasta pronto!
  #5 (permalink)  
Antiguo 20/07/2008, 08:55
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Respuesta: Sumar días a fecha actual

Hola:

Yo diría que ya lo tienes, lo único que ocurre es que el atributo onsubmit es de la etiqueta <form>, no de la etiqueta <input>.


Saludos!
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #6 (permalink)  
Antiguo 21/07/2008, 14:58
 
Fecha de Ingreso: mayo-2008
Mensajes: 5
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Sumar días a fecha actual

Hola derkenuke,gracias por la pronta respuesta!

He corregido lo de la etiqueta, pero sigue sin funcionar, y no sé por qué.

Me sale siempre un resultado menor que 30, porque ponga la fecha que ponga se me va a "else".

Saludos, y muchas gracias.
  #7 (permalink)  
Antiguo 21/07/2008, 15:08
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Sumar días a fecha actual

Aquí te faltan llaves:
Código PHP:
if (dias>30)
return 
true
else
alert("Sólo servimos en un plazo superior a un mes.Introduzca una fecha posterior")
 return 
false 
Debería ser:
Código PHP:
if (dias>30) {
return 
true;
else {
alert("Sólo servimos en un plazo superior a un mes.Introduzca una fecha posterior");
 return 
false; } 
Quizás sea ese el error
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #8 (permalink)  
Antiguo 21/07/2008, 15:36
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Respuesta: Sumar días a fecha actual

Hola de nuevo:

No creo que sea lo de las llaves, también puede funcionar sin ellas (aunque se entiende peor). El constructor del objeto Date es new Date (anio, mes, dia), y no dia, mes, anio como has escrito.

Por otra parte tienes que tener en cuenta que nosotros contamos enero como el mes 1, pero javascript cuenta enero como mes 0. Así que
var mes = parseInt(array_fecha[1]);
tendría que ser
var mes = parseInt(array_fecha[1])-1;

También tenemos un problema con los parseInt(). Al ponerlos sin la base conversora, si introducimos un String que comienza por cero automáticamente se toma como número octal, no decimal. Luego hay que especificar en qué base trabajamos.

El código quedaría así:
Código PHP:
<html>
<
head>
<
script>
function 
validaFecha(){
    var 
hoy= new Date();
    var 
array_fecha document.formulario.fecha.value.split("/");
    var 
anio parseInt(array_fecha[2], 10);
    var 
mes parseInt(array_fecha[1], 10)-1;
    var 
dia parseInt(array_fecha[0], 10);
    var 
fechaDeseada= new Date(aniomesdia);
    var 
diferencia fechaDeseada.getTime() - hoy.getTime();
    var 
dias Math.floor(diferencia / (1000 60 60 24));
    if (
dias>30) {
        return 
true;
    }
    else {
        
alert("Sólo servimos en un plazo superior a 30 días. La suya tiene un plazo de "+dias+" días. Introduzca una fecha posterior");
        return 
false;
    }
}
</script>
</head>

<body>
<form id="formulario" name="formulario" method="post" action="" onsubmit= "return validaFecha()" >
    <input type="text" name="fecha" />
    <input type="submit" name="Submit" value="Enviar"/>
</form>
</body>
</html> 

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.
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 17:35.