Foros del Web » Programando para Internet » Javascript »

Restar Fechas con formato literal en los meses

Estas en el tema de Restar Fechas con formato literal en los meses en el foro de Javascript en Foros del Web. Buenas tardes, tengo un problema estoy restando dos fechas del tipo mm/dd/yyyy y la resta sale bien, pero ahora el campo mm cambio por literal ...
  #1 (permalink)  
Antiguo 28/02/2011, 16:10
 
Fecha de Ingreso: septiembre-2010
Mensajes: 6
Antigüedad: 13 años, 6 meses
Puntos: 0
Pregunta Restar Fechas con formato literal en los meses

Buenas tardes, tengo un problema estoy restando dos fechas del tipo mm/dd/yyyy y la resta sale bien, pero ahora el campo mm cambio por literal por ejemplo Feb 28, 2011 y la funcion que tengo pues ya no me sirve, como puedo restar fechas con meses en formato literal, lo que tenia era lo siguiente:

function daysBetween(date1, date2){
var date1=getField('From').value;
var date2=getField('To').value;

var aDateTo=date1.split('/');
var aDateFrom=date2.split('/');
var sDateTo=aDateTo[2]+aDateTo[0]+aDateTo[1]+'';
var sDateFrom=aDateFrom[2]+aDateFrom[0]+aDateFrom[1]+'';



if(parseFloat(sDateTo) < parseFloat(sDateFrom) || parseFloat(sDateTo) == parseFloat(sDateFrom))
{

if (date1.indexOf("-") != -1) { date1 = date1.split("-"); } else if (date1.indexOf("/") != -1) { date1 = date1.split("/"); } else { return 0; }
if (date2.indexOf("-") != -1) { date2 = date2.split("-"); } else if (date2.indexOf("/") != -1) { date2 = date2.split("/"); } else { return 0; }
if (parseInt(date1[0], 10) >= 1000) {
var sDate = new Date(date1[0]+"/"+date1[1]+"/"+date1[2]);
} else if (parseInt(date1[2], 10) >= 1000) {
var sDate = new Date(date1[2]+"/"+date1[0]+"/"+date1[1]);
} else {
return 0;
}
if (parseInt(date2[0], 10) >= 1000) {
var eDate = new Date(date2[0]+"/"+date2[1]+"/"+date2[2]);
} else if (parseInt(date2[2], 10) >= 1000) {
var eDate = new Date(date2[2]+"/"+date2[0]+"/"+date2[1]);
} else {
return 0;
}
var one_day = 1000*60*60*24;
var daysApart = Math.abs(Math.ceil((sDate.getTime()-eDate.getTime())/one_day));
getField('Number_days').value = daysApart;
return daysApart;
}
else

alert('Field "To" should be greater than Field "From".');

}

Tal vez se puede adaptar de alguna forma, agradeceria muchisimo su ayuda

Saludos
  #2 (permalink)  
Antiguo 28/02/2011, 16:32
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 9 meses
Puntos: 1012
Respuesta: Restar Fechas con formato literal en los meses

usa el método parse. te convierte la fecha en milisegundos con lo que ya es fácilmente comparable ambas fechas
  #3 (permalink)  
Antiguo 28/02/2011, 17:36
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 14 años, 11 meses
Puntos: 1485
Respuesta: Restar Fechas con formato literal en los meses

buenas...

nota sobre Date.parse:
buenas...

Cita:
Iniciado por zerokilled Ver Mensaje
en javascript tienes la funcion Date.parse, el problema es que el formato que utiliza el string para convertirlo a un timestamp no es esta estandarizado, de modo que es dependiende de la implementacion de javascript. por ejemplo, ese mismo string en chrome me funciona bien con la funcion Date.parse, pero puede ser que otro navegador no acepte ese formato. sin embargo, en firefox ese formato no funciona. en lugar de guiones debes usar espacios.
aunque util, en mi opinion es mejor utilizar una funcion propia para analizar la fecha y obtener el timestamp. simplemente para evitar la incompatibilidad de los formatos entres los navegadores. punto y aparte... analizando el codigo lo veo demasiado redundante. facilmente puedes usar el constructor Date dividiendo la cadena en un array y al invocar Date utiliza el array en el orden apropiado. si el mes esta escrito por su nombre, podrias usar un objeto donde la propiedad sea el nombre del mes y el valor su correspondiente numero.
Código:
// notese que comienza por 0 ;
monthsName = {"Jan":0, "Feb":1, ..., "Nov":10, "Dec":11};

// asumiento que el formato es "Feb 28, 2011" ;
var array_date = string_date.split(/[\x20,]+/);
new Date(array_date[2], monthsName[array_date[0]], array_date[1]);
se puede hacer mas elaborado, pero es una idea para que tengas por donde partir.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: fechas, formato, meses, restar
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 16:08.