Foros del Web » Programando para Internet » Javascript »

[Fechas]Problemas sumar fechas

Estas en el tema de [Fechas]Problemas sumar fechas en el foro de Javascript en Foros del Web. Necesito que para una fecha de inicio determinada me sume X dias. Para eso me cree la siguientes funciones: Código: function addDays(fecha,dias) { var fechaPrueba ...
  #1 (permalink)  
Antiguo 04/11/2013, 06:19
 
Fecha de Ingreso: agosto-2012
Ubicación: España
Mensajes: 18
Antigüedad: 11 años, 8 meses
Puntos: 1
Pregunta [Fechas]Problemas sumar fechas

Necesito que para una fecha de inicio determinada me sume X dias.

Para eso me cree la siguientes funciones:

Código:
function addDays(fecha,dias) {
	var fechaPrueba = new Date(parseInt(2013),parseInt(12),parseInt(15));
	try {
		var sumarDias=parseInt(dias);
		var fecha=fecha.split("-");
		var fecha= new Date(fecha[2],fecha[1],fecha[0]);
		var maxDay = maxDayMonth(fecha.getMonth());
		var dia=fecha.getDate()+sumarDias;
		if (dia>maxDay) {
			dia=maxDay-fecha.getDate();
			dia=(sumarDias-dia);
			fecha.setMonth(fecha.getMonth()+1);
			fecha.setDate(dia);
		} else {
			fecha.setDate(fecha.getDate()+sumarDias);
		}
		var anio=fecha.getFullYear();
		var mes= fecha.getMonth();
		var dia= fecha.getDate();
		if(mes.toString().length<2){
			mes="0".concat(mes);
		}
		if(dia.toString().length<2){
			dia="0".concat(dia);
		}
		return dia+"-"+mes+"-"+anio;
	} catch(err) {
		return 0;
	}
}
function maxDayMonth(xMes) { 
	switch(xMes) { 
		case 1: return 31; 
		case 2: return 28; 
		case 3: return 31; 
		case 4: return 30; 
		case 5: return 31; 
		case 6: return 30; 
		case 7: return 31; 
		case 8: return 31; 
		case 9: return 30; 
		case 10: return 31; 
		case 11: return 30; 
		case 12: return 31; 
	} 
}
Para su uso cuando llamo a la funcion le paso la fecha inicio y la cantidad de dias de estancia.
Pero cuando selecciono el mes 12(Noviembre), por ejemplo: desde 15/12/2013 dias 1, me retorna el valor 16/00/2014
He estado realizando pruebas y solo me pasa con noviembre, de forma manual he realizado:
Código:
var fecha=new Date(2013,12,15);
alert(fecha);
alert(fecha.getMonth());
alert(fecha.getFullYear());
Y me da el mismo error. El día me lo muestra bien, pero el mes (12) y el año(2013) me muestra 00 y 2014


Pd: Alquien puede aclararme si javascript empieza a contar el nº de los meses a partir del valor 0, es decir, enero=0,febrero=1,marzo=2... ya que si es así, ese sería el fallo, que estoy tratando con un mes que no existe, el mes 12 sería el index 11. Realizo pruebas ahora para ver si es correcto.

Última edición por davielsanchez; 04/11/2013 a las 06:43
  #2 (permalink)  
Antiguo 04/11/2013, 07:07
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: [Fechas]Problemas sumar fechas

http://jsfiddle.net/bwJ2u/

Código Javascript:
Ver original
  1. Date.prototype.sumarDias=function(dias){
  2.     if (!isNaN(dias))
  3.     {
  4.         dias=parseInt(dias);
  5.         this.setDate(this.getDate()+dias);
  6.     }
  7.     return this;
  8. }
  9.  
  10. var hoy=new Date();
  11. alert(hoy);
  12. hoy.sumarDias(1);
  13. alert(hoy);
  #3 (permalink)  
Antiguo 04/11/2013, 16:12
 
Fecha de Ingreso: agosto-2012
Ubicación: España
Mensajes: 18
Antigüedad: 11 años, 8 meses
Puntos: 1
Respuesta: [Fechas]Problemas sumar fechas

Es mucho más fácil que lo que he realizado yo, pero sigue igualmente con el fallo.
Código:
var hoy=new Date(2013,12,15);
alert(hoy);
hoy.sumarDias(1);
alert(hoy);
Gracias,aun no lo he corregido, pero el fallo esta en que javascript cuenta a partir del 0 como el primer mes del año, en este caso enero, por lo tanto el mes o INDEX 12 no existe, el que si existe es el 11 que equivale al mes 12
Cita:
0 ENERO
1 FEBRERO
2 MARZO
3 ABRIL
4 MAYO
5 JUNIO
6 JULIO
7 AGOSTO
8 SEPTIEMBRE
9 OCTUBRE
10 NOVIEMBRE
11 DICIEMBRE
Por eso al crear una fecha var fecha=new Date(2013,12,15); devuelve el valor en el mes 00, por que el indice 12 no existe y devuelve un valor 0
  #4 (permalink)  
Antiguo 04/11/2013, 16:24
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: [Fechas]Problemas sumar fechas

¿Y que javascript cuente enero como 0 es un fallo? No, el fallo lo tendrá quien no lo sepa.
Si lo que quieres es formatear la salida del DATE para mostrarla como una cadena, usa el método FORMAT que para eso está.
http://blog.stevenlevithan.com/archi...te-time-format
  #5 (permalink)  
Antiguo 05/11/2013, 13:51
danneg
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: [Fechas]Problemas sumar fechas

Para sumar días sólo has ésto

Código Javascript:
Ver original
  1. Date.prototype.sumarDias = function (dias) {
  2.     this.setDate( this.getDate() + dias );
  3. }

Fácil y rápido.

Igual deberías intentar pasar un @string como parámetro, ej.

Código Javascript:
Ver original
  1. hoy = new Date('2013-11-5');

Eso arreglará el problema de los index de los meses.

Etiquetas: funcion
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 01:45.