Foros del Web » Programando para Internet » Javascript »

Comparar 2 fechas

Estas en el tema de Comparar 2 fechas en el foro de Javascript en Foros del Web. Hola estoy tratando de comparar dos fechas en formato 8/28/2009, hice esto, pero me marca error en el primer split @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código js: Ver ...
  #1 (permalink)  
Antiguo 07/09/2009, 12:41
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 14 años, 9 meses
Puntos: 0
Pregunta Comparar 2 fechas

Hola estoy tratando de comparar dos fechas en formato 8/28/2009, hice esto, pero me marca error en el primer split

Código js:
Ver original
  1. function compararFecha()
  2. {
  3.     var fecha1;
  4.     var fecha2;
  5.     var fechafinal;
  6.     var fechainicio;
  7.    
  8.     fecha1 = strFecha_final.split(\\\"/\\\");
  9.     fecha2 = strFecha_inicio.split(\\\"/\\\");
  10.  
  11.     fechainicio = fecha2[2] + fecha2[1] + fecha2[0]
  12.     fechafinal = fecha1[2] + fecha1[1] + fecha1[0]
  13.     if(fechainicio < fechafinal) return true;
  14.     else return false;
  15. }
  16.  
  17. if(!compararFecha()){
  18.     document.getElementById("mensaje").innerHTML="La fecha final no debe ser menor a la inicial.";
  19. }

alguien me puede echar una mano para terminar este script?
  #2 (permalink)  
Antiguo 07/09/2009, 12:56
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Comparar 2 fechas

el argumento de split tiene que ser una de dos, un string o una expresion regular. no se que exactamente quisistes poner pero segun viendo la fecha lo unico que necesitas es "/" para separar los componentes. en adicion, recuerda que tienes que convertir la fecha a objeto Date para poder comparar ambas fecha.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 07/09/2009, 14:05
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Comparar 2 fechas

Cita:
Iniciado por zerokilled Ver Mensaje
en adicion, recuerda que tienes que convertir la fecha a objeto Date para poder comparar ambas fecha.
El problema estaría en que no las reconocería como fechas ya que quedarían algo como 2009288, así que quizás lo mejor sería tratarlas como interger
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #4 (permalink)  
Antiguo 07/09/2009, 14:35
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Comparar 2 fechas

no comprendi el comentario. en todo caso, luego de separar los componentes de la fecha, es cuestion de ordenarlo segun los parametros de Date.

Código:
fecha1 = "8/28/2009".split("/");
obj1 = new Date(fecha1[2], fecha1[0] - 1, fecha1[1]);
fecha2 = "11/28/2009".split("/");
obj2 = new Date(fecha2[2], fecha2[0] - 1, fecha2[1]);
alert(obj1 < obj2);
cuando dos objetos Date se compara se comparan como integer.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 07/09/2009 a las 18:28 Razón: pequeña correcion al codigo
  #5 (permalink)  
Antiguo 07/09/2009, 14:46
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Comparar 2 fechas

Sí, no tiene objeción. Solo que, en el modo que lo está haciendo, lo único que hace es concatenar cada elemento (yyyymmdd) de tal manera que resultará 2009288, lo cual es menor que 20092811
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #6 (permalink)  
Antiguo 07/09/2009, 14:54
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Comparar 2 fechas

vale, lo habia captado mal pues estabas citando una linea de mi post pero estas haciendo referencia a tampon
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 07/09/2009, 15:12
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Comparar 2 fechas

Hola si es justo como dice Adler, para que al fina pueda hacer la comparacion de cual es menor, pero hice lo que me sugirio zerokilled inicialmente y aun me marco error en el primer split, lo podrian testear y me dicen como les va?

saludos!
  #8 (permalink)  
Antiguo 07/09/2009, 16:15
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Comparar 2 fechas

¿cual es el error que te dice la consola?
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #9 (permalink)  
Antiguo 07/09/2009, 16:18
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Comparar 2 fechas

en realidad solo me dice error en la linea tal. pero no da mas detalles
  #10 (permalink)  
Antiguo 07/09/2009, 16:36
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Comparar 2 fechas

intentalo con otro navegador que te provea mas detalle acerca del error, como firefox. asumo que estas usando iexplorer, este no provee la informacion suficiente del error.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #11 (permalink)  
Antiguo 07/09/2009, 16:46
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Comparar 2 fechas

Hola pues lo acabo de intentar con ff pero este salio peor... aparte de que no ejecuto nada no me dijo siquiera que habia un error.
  #12 (permalink)  
Antiguo 07/09/2009, 16:53
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Comparar 2 fechas

acabo de ver que ie me arroja este dato
Cita:
Mensaje: 'strFecha_final' is undefined
Línea: 124
Carácter: 2
Código: 0
  #13 (permalink)  
Antiguo 07/09/2009, 17:57
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Comparar 2 fechas

significa que esa variable no existe en tu codigo. ¿como obtienes la fecha o como intentas definir la variable?
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #14 (permalink)  
Antiguo 07/09/2009, 18:12
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Comparar 2 fechas

Hola zerokilled, si despues de ver ese error cai en cuenta, cambie el codigo intentando poner la ruta id, pero aun asi me manda error..

Cita:
Mensaje: Object doesn't support this property or method
Línea: 124
Carácter: 2
Código: 0
y asi quedo el codigo:

Código js:
Ver original
  1. function compararFecha()
  2. {
  3.     var fecha1;
  4.     var fecha2;
  5.     var fechafinal;
  6.     var fechainicio;
  7.    
  8.     fecha1 = document.getElementById("fecha1").split("/");
  9.     fecha2 = document.getElementById("fecha2").split("/");
  10.  
  11.     fechainicio = fecha2[2] + fecha2[1] + fecha2[0]
  12.     fechafinal = fecha1[2] + fecha1[1] + fecha1[0]
  13.     if(fechainicio < fechafinal) return true;
  14.     else return false;
  15. }
  #15 (permalink)  
Antiguo 07/09/2009, 18:16
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Comparar 2 fechas

me cito:
Cita:
en adicion, recuerda que tienes que convertir la fecha a objeto Date para poder comparar ambas fecha.
si lees el 4to y 5to post, obtendra la respuesta.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #16 (permalink)  
Antiguo 08/09/2009, 16:44
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Comparar 2 fechas

Hola gracias por las respuestas y disculpa por la demora en responder, pero ultimamente tengo problemas para entrar a los foros.

Resulta que tuve que cambiar la funcion por que asi me lo solicitaron, el cliente me paso una pero tengo un gran problema, me pidio que la deje poniendo fechas anteriores.

Como veran la mayoria de calendarios puedes poner fechas futuras y fechas pasadas, pero este no solo me permite poner fechas futuras, entonces voy a poner el codigo haber si me pudieras echar una mano para habilitar las fechas pasadas, yo pienso que deve de ser cualquier bobada, epro ya le estube moviendo y nada..

Código js:
Ver original
  1. <script language="JavaScript">
  2.  
  3. var gdCtrl = new Object();
  4. var gcGray = "#BEBEBE";
  5. var gcToggle = "#CCCCCC";
  6. var gcBG = "#FFFFFF";
  7. var gcdarkblue= "#CC0000";
  8. var gdCurDate = new Date();
  9. var giYear = gdCurDate.getFullYear();
  10. var giMonth = gdCurDate.getMonth()+1;
  11. var giDay = gdCurDate.getDate();
  12. var VicPopCal = new Object();
  13. var diafechado;
  14. var mesfechado;
  15. var yearfechado;
  16. var overCerrar = "#CEC6A6";
  17.  
  18. function fPopCalendar(popCtrl, dateCtrl, popCal, year, month, day){
  19.   //parent.event.cancelBubble=true;
  20.   VicPopCal = popCal;
  21.   gdCtrl = dateCtrl;
  22.   diafechado=day;
  23.   mesfechado=month;
  24.   yearfechado=year;
  25.   fSetYearMon(year, month);
  26.   var point = fGetXY(popCtrl);
  27.    with (VicPopCal.style) {
  28.     left = point.x+154+'px';
  29.     top  = point.y-89+'px';
  30.     visibility = 'visible';
  31.   }
  32.   VicPopCal.focus();
  33.   // in order to make compatible with IE4.x , here I cut two line below off.
  34.   // VicPopCal.all("popFrame").width=document.all("popTable").offsetWidth;
  35.   // VicPopCal.all("popFrame").height=document.all("popTable").offsetHeight;
  36.   // if u only target on IE5.x, uncommented them and delete the width&height prop in <IFrame> tag
  37.   // thus you will find the 3rd para in fDrawCal() now works perfectly.
  38. }
  39.  
  40. function cerrar(){
  41.     VicPopCal.style.visibility = "hidden";
  42. }
  43.  
  44. function fSetDate(iYear, iMonth, iDay){
  45.     var meses = Array('', 'Ene','Feb','Mar','Abr','May','Jun','Jul','Ago','Sep','Oct','Nov','Dic');
  46.     iMonth = meses[parseInt(iMonth)];
  47.    
  48.     if (iDay<10)
  49.         iDay = "0"+iDay;
  50.        
  51.     gdCtrl.value = iDay+"/"+iMonth+"/"+iYear;  
  52.  
  53.     VicPopCal.style.visibility = "hidden";
  54. }
  55.  
  56. function fSetSelected(aCell, num){
  57.   var iOffset = 0;
  58.   var iYear = parseInt(window.document.getElementById('tbSelYear').value);
  59.   var iMonth = parseInt(window.document.getElementById('tbSelMonth').value);
  60.  
  61.   aCell.bgColor =gcBG;
  62.   with (window.document.getElementById("cellText["+num+"]")) {
  63.   //with (aCell.children[ "cellText["+num+"]" ]) {
  64.   //    var iDay = parseInt(innerText);
  65. //  var iDay = parseInt(window.document.getElementById("cellText["+num+"]").value);}
  66. var browser=navigator.appName;
  67. if (browser=="Microsoft Internet Explorer"){
  68.  var iDay = window.document.getElementById("cellText["+num+"]").innerText;
  69. }
  70. else {
  71.  var iDay = parseInt(innerHTML);
  72. }
  73.   }
  74.   if (!isNaN(iDay))
  75.     if (giYear<iYear)
  76.         if (giMonth>iMonth)
  77.             fSetDate(iYear, iMonth, iDay);
  78.         else {
  79.             if (giMonth==iMonth) {
  80.                 if (giDay>=iDay)
  81.                     fSetDate(iYear, iMonth, iDay);
  82.             }
  83.         }
  84.     else
  85.         if (giYear==iYear)
  86.                 if (giMonth<iMonth)
  87.                     fSetDate(iYear, iMonth, iDay);
  88.                 else
  89.                     if (giMonth==iMonth)
  90.                         if (giDay<=iDay)
  91.                             fSetDate(iYear, iMonth, iDay);
  92. }
  93.  
  94. function Point(iX, iY){
  95.     this.x = iX-162;
  96.     this.y = iY+23;
  97. }
  98.  
  99. function fBuildCal(iYear, iMonth) {
  100.   var aMonth=new Array();
  101.   for(i=1;i<7;i++)
  102.     aMonth[i]=new Array(i);
  103.  
  104.   var dCalDate=new Date(iYear, iMonth-1, 1);
  105.   var iDayOfFirst=dCalDate.getDay();
  106.   var iDaysInMonth=new Date(iYear, iMonth, 0).getDate();
  107.   var iOffsetLast=new Date(iYear, iMonth-1, 0).getDate()-iDayOfFirst+1;
  108.   var iDate = 1;
  109.   var iNext = 1;
  110.  
  111.  for (d = 0; d < 7; d++)
  112.     aMonth[1][d] = (d<iDayOfFirst)?" ":iDate++;
  113.   for (w = 2; w < 7; w++)
  114.     for (d = 0; d < 7; d++)
  115.         aMonth[w][d] = (iDate<=iDaysInMonth)?iDate++:" ";
  116.   return aMonth;
  117. }
  118.  
  119. function fDrawCal(iYear, iMonth, iCellWidth, iDateTextSize) {
  120.   var WeekDay = new Array("D","L","M","M","J","V","S");
  121.   var styleTD = " bgcolor='"+gcBG+"' width='"+iCellWidth+"' bordercolor='"+gcBG+"' valign='middle' align='center'  class='calendario' ";
  122.   with (document) {
  123.     write("<tr>");
  124.     for(i=0; i<7; i++)
  125.         write("<td "+styleTD+" ><b>" + WeekDay[i] + "</b></td>");
  126.     write("</tr>");
  127.  
  128.     for (w = 1; w < 7; w++) {
  129.         write("<tr>");
  130.         for (d = 0; d < 7; d++) {
  131.         num=(7*w)+d;
  132.                  write("<td id=calCell"+(w+d)+ " "+styleTD+"' onMouseOver='this.bgColor=gcToggle' onMouseOut='this.bgColor=gcBG' onclick=fSetSelected(calCell"+(w+d)+ ","+num+")> ");
  133.             write("<font id=cellText["+num+"] ></font>");
  134.             write("</td>")
  135.         }
  136.         write("</tr>");
  137.     }
  138.   }
  139. }
  140.  
  141. function fUpdateCal(iYear, iMonth) {
  142.   myMonth = fBuildCal(iYear, iMonth);
  143.   var i = 0;
  144.   for (w = 0; w < 6; w++)
  145.     for (d = 0; d < 7; d++)
  146.     with (window.document.getElementById("cellText["+((7*(w+1))+d)+"]")) {
  147.    
  148.         //with (cellText[(7*w)+d]) {
  149.             if (myMonth[w+1][d]<0) {
  150.                 color = gcGray;
  151.                 innerHTML  = -myMonth[w+1][d];
  152.             }else{
  153.                
  154.     if (giYear<iYear)
  155.         if (giMonth>iMonth) {
  156.             color = ((d==0)||(d==6))?"#AA0000":"black";
  157.             onClick = "javascript:";
  158.             innerHTML  =myMonth[w+1][d];
  159.         }
  160.         else {
  161.             if (giMonth==iMonth) {
  162.                 if (giDay>=myMonth[w+1][d]) {
  163.                     color = ((d==0)||(d==6))?"#AA0000":"black";
  164.                     innerHTML  =myMonth[w+1][d];
  165.                 }
  166.                 else {
  167.                     color = gcGray;
  168.                     innerHTML  =myMonth[w+1][d];
  169.                 }
  170.             }
  171.             else {
  172.                 color = gcGray;
  173.                 innerHTML  =myMonth[w+1][d];
  174.             }
  175.         }
  176.     else
  177.         if (giYear==iYear) {
  178.                 if (giMonth<iMonth) {
  179.                     color = ((d==0)||(d==6))?"#AA0000":"black";
  180.                     innerHTML  =myMonth[w+1][d];
  181.                 }
  182.                 else {
  183.                     if (giMonth==iMonth) {
  184.                         if (giDay<=myMonth[w+1][d]) {
  185.                             color = ((d==0)||(d==6))?"#AA0000":"black";
  186.                             innerHTML  =myMonth[w+1][d];
  187.                         }
  188.                         else {
  189.                             color = gcGray;
  190.                             innerHTML =myMonth[w+1][d];
  191.                         }
  192.                     }
  193.                     else {
  194.                         color = gcGray;
  195.                         innerHTML =myMonth[w+1][d];
  196.                     }
  197.                 }
  198.         }
  199.         if(giYear==iYear && giMonth==iMonth && giDay==myMonth[w+1][d]) { //fecha de hoy
  200.             color = "#CC0000";
  201.         }
  202.         if(iYear==yearfechado && iMonth==mesfechado && myMonth[w+1][d]==diafechado) { //fecha seleccionada
  203.             color = "red";
  204.             bgColor="black";
  205.         }
  206.  
  207.             }
  208.         }
  209.    
  210. }
  211.  
  212. function fSetYearMon(iYear, iMon){
  213.   window.document.getElementById('tbSelMonth').options[iMon-1].selected = true;
  214.   //tbSelMonth.options[iMon-1].selected = true;
  215.  
  216.   for (i = 0; i < window.document.getElementById('tbSelYear').length; i++)
  217.  // for (i = 0; i < tbSelYear.length; i++)
  218.  
  219.   if (window.document.getElementById('tbSelYear').options[i].value == iYear)
  220. //  if (tbSelYear.options[i].value == iYear)
  221.         window.document.getElementById('tbSelYear').options[i].selected = true;
  222. //      tbSelYear.options[i].selected = true;
  223.   fUpdateCal(iYear, iMon);
  224. }
  225.  
  226.  
  227.  
  228. function fGetXY(aTag){
  229.   var oTmp = aTag;
  230.   var pt = new Point(0,0);
  231.   do {
  232.     pt.x += oTmp.offsetLeft;
  233.     pt.y += oTmp.offsetTop;
  234.     oTmp = oTmp.offsetParent;
  235.   } while(oTmp.tagName!="BODY");
  236.   return pt;
  237. }
  238.  
  239. var gMonths = new Array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
  240.  
  241. with (document) {
  242. //write("<p align=right > . </p>");
  243. write("<BODY leftMargin=0 topMargin=0 > <p>");
  244. write("<table id='popTable' border='0' width=200 height=178 align='center' >");
  245. write("<TR>");
  246. write("<td align='middle' align='center' >");
  247. write('&nbsp;<select name="tbSelMonth" id="tbSelMonth" onChange="fUpdateCal(window.document.getElementById('+"'tbSelYear'"+').value, window.document.getElementById('+"'tbSelMonth'"+').value)" class="form_izq2">');
  248. for (i=0; i<12; i++)
  249.         write("<option value='"+(i+1)+"'>"+gMonths[i]+"</option>");
  250. write("</SELECT>");
  251. write('&nbsp;<SELECT name="tbSelYear" id="tbSelYear" onChange="fUpdateCal(window.document.getElementById('+"'tbSelYear'"+').value, window.document.getElementById('+"'tbSelMonth'"+').value)" class="form_izq2">');
  252. for(i=giYear;i<=giYear+1;i++)
  253.     write("<OPTION value='"+i+"'>"+i+"</OPTION>");
  254. write("</SELECT> <font class='calendario' style='cursor:pointer; font-size: 14px; color:green;' onclick='cerrar()' onMouseOver='this.style.color=overCerrar' onMouseOut='this.style.color=gcdarkblue' valing='right'>| x |</font>");
  255.  
  256. write("</td>");
  257. write("</TR><TR>");
  258. write("<td align='center'>");
  259. write("<DIV'><table width='100%' border='0' cellpadding='0' style='cursor:pointer;'>");
  260. fDrawCal(giYear, giMonth, 19, 12);
  261. write("</table></DIV>");
  262. write("</td>");
  263. write("</TR><TR><TD align='center'>");
  264. write("<font style='cursor:pointer; font:bold 12 Verdana ; color:#CC0000;' onclick='fSetDate(giYear,giMonth,giDay)' onMouseOver='this.style.color=overCerrar' onMouseOut='this.style.color=gcdarkblue; '>Hoy :&nbsp;&nbsp;"+giDay+"&nbsp;"+gMonths[giMonth-1]+",&nbsp;"+giYear+"</font><br>");
  265. write("</TD></TR>");
  266. write("</TD></TR>");
  267. write("</TABLE>");
  268. }
  269.  
  270. </SCRIPT>

Ojala me pudieras ayudar para ahora si yo poder hacer una comparacion en este formato.

saludos y gracias!
  #17 (permalink)  
Antiguo 09/09/2009, 06:05
Avatar de tampon  
Fecha de Ingreso: julio-2009
Mensajes: 420
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Comparar 2 fechas

Sera que alguien me puede echar una mano con esto?
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 04:28.