Comunidad de diseño web y desarrollo en internet online

Diferencia entre fechas

Citar            
MensajeEscrito el 24 Nov 2006 08:51 pm
:cry: Hace unos dias encontre un script donde se puede sacar la diferencia entre dos fechas por ejemplo: (dd/mm/aa) 15/05/2006 y 20/05/2006 dandome el resultado de 5 dias, eso esta perfecto, el problema comenso cuando introdusco por ejemplo 30/11/2006 y 03/12/2006 en lugar de darme una diferencia de 3 dias me da una de 4 esto ocurre mas que nada cuando es fin de mes menos inicio de mes y aun peor cuando coloco 31/01/2006 y 01/02/2006 el resultado es -2, esto no puede ser, bueno espero puedan ayudarme pues si me super urge les coloco el scrip que encontre y estoy utilizando de ante mano nuchisimas gracias

Código :

 function diferencia(form)
 {
  form.noches.focus();
  form.noches.select();
  
  CadenaFecha1=form.dia.value+"/"+form.mes.value+"/"+form.ano.value;
  CadenaFecha2=form.dia2.value+"/"+form.mes2.value+"/"+form.ano2.value;
  
  //Obtiene dia, mes y año
   var fecha1 = new fecha( CadenaFecha1 )   
   var fecha2 = new fecha( CadenaFecha2 )
   
   //Obtiene objetos Date
   var miFecha1 = new Date( fecha1.anio, fecha1.mes, fecha1.dia )
   var miFecha2 = new Date( fecha2.anio, fecha2.mes, fecha2.dia )

   //Resta fechas y redondea
//   Math.floor((fecha1.getTime()-fecha2.getTime())/(3600000*24))
   var diferencia = miFecha2.getTime() - miFecha1.getTime()
   var dias = Math.floor(diferencia / (3600000*24))
   var segundos = Math.floor(diferencia / 1000)
  // alert ('La diferencia es de ' + dias + ' dias,\no ' + segundos + ' segundos.')
  
   form.noches.value=dias;
   return false
 }
 
function fecha( cadena ) {

   //Separador para la introduccion de las fechas
   var separador = "/"

   //Separa por dia, mes y año
   if ( cadena.indexOf( separador ) != -1 ) {
        var posi1 = 0
        var posi2 = cadena.indexOf( separador, posi1 + 1 )
        var posi3 = cadena.indexOf( separador, posi2 + 1 )
        this.dia = cadena.substring( posi1, posi2 )
        this.mes = cadena.substring( posi2 + 1, posi3 )
        this.anio = cadena.substring( posi3 + 1, cadena.length )
   } else {
        this.dia = 0
        this.mes = 0
        this.anio = 0   
   }
}



[zah]Usa las etiquetas code para postear código[/zah]

Por eliza

4 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 24 Nov 2006 10:21 pm

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 25 Nov 2006 06:18 pm
:D hola nuevamente, encontre la forma de resolver el problema de las fechas y funciona muy bien a qui les dejo la solucion

<script language="JavaScript"><!-- Hide script from old browsers
function kr_loadfd(form) {
kr_checkVal = form.dia.selectedIndex;
if (kr_checkVal == 30){
kr_checkVal = kr_checkVal-1;
}
form.dia2.options[kr_checkVal+1].selected=1;
}

function kr_loadfm(form) {
kr_checkVal = form.mes.selectedIndex;
form.mes2.options[kr_checkVal].selected=1;
}

function kr_loadfy(form) {
kr_checkVal = form.ano.selectedIndex;
form.ano2.options[kr_checkVal].selected=1;
}

//Weekday Array
var kr_wdArray = new Array("Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab")

//set weekdays
function kr_setWkd(form) {

for (var i = 0; i < form.ano.length; i++) {
if (form.ano.options[i].selected)
var kr_fyear = form.ano.options[i].text;
if (form.ano2.options[i].selected)
var kr_tyear = form.ano2.options[i].text;
}
var kr_checkinDate = new Date(kr_fyear,form.mes.selectedIndex,form.dia.selectedIndex+1);
var kr_checkoutDate = new Date(kr_tyear,form.mes2.selectedIndex,form.dia2.selectedIndex+1);

form.kr_inWd.value = "(" + kr_wdArray[kr_checkinDate.getDay()] + ")"
form.kr_outWd.value = "(" + kr_wdArray[kr_checkoutDate.getDay()] + ")"

var kr_numNights = Math.round((kr_checkoutDate - kr_checkinDate) / 86400000)

if (kr_numNights < 1) kr_numNights = "?????";
else if (kr_numNights == 1) kr_numNights += " Noche";
else kr_numNights += " Noches";

form.noches.value = kr_numNights
}

function submitlangform() {
document.langform.submit();
}
// -->
</script>



<form action="/reserve.php" method="POST" target="_self" name="form1">
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="5">
<tr>
<td colspan="2">&nbsp;</td>
</tr>

<tr>
<td align="right" valign="middle" nowrap><nobr><b>Fecha de llegada:&nbsp;</b></td>
<td nowrap><select name="mes" size="1" onChange="kr_loadfm(this.form);kr_setWkd(this.form)">
<option value="1">Enero</option>
<option value="2"> Febrero</option>
<option value="3"> Marzo</option>
<option value="4"> Abril</option>
<option value="5"> Mayo</option>
<option value="6"> Junio</option>
<option value="7"> Julio</option>
<option value="8"> Agosto</option>
<option value="9"> Septiembre</option>
<option value="10"> Octubre</option>
<option value="11" selected> Noviembre</option>
<option value="12"> Diciembre</option>
</select>
<select name="dia" size="1" onChange="kr_loadfd(this.form);kr_setWkd(this.form)">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27" selected>27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
<select name="ano" size="1" onChange="kr_loadfy(this.form);kr_setWkd(this.form)">
<option value="2006" selected>2006</option>
<option value="2007">2007</option>
<option value="2008">2008</option>
<option value="2009">2009</option>
</select>
<input type="hidden" class="hideleft" name="kr_inWd" size="5" onFocus="this.blur()"> </td>
</tr>
<tr>
<td align="right" nowrap ><b>Fecha de salida:&nbsp;</b></td>
<td nowrap><div align="left">
<select name="mes2" size="1" onChange="kr_setWkd(this.form)">
<option value="1">Enero</option>
<option value="2"> Febrero</option>
<option value="3"> Marzo</option>
<option value="4"> Abril</option>
<option value="5"> Mayo</option>
<option value="6"> Junio</option>
<option value="7"> Julio</option>
<option value="8"> Agosto</option>
<option value="9"> Septiembre</option>
<option value="10"> Octubre</option>
<option value="11" selected> Noviembre</option>
<option value="12"> Diciembre</option>
</select>
<select name="dia2" size="1" onChange="kr_setWkd(this.form)">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28" selected>28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
<select name="ano2" size="1" onChange="kr_setWkd(this.form)">
<option value="2006" selected>2006</option>
<option value="2007">2007</option>
<option value="2008">2008</option>
<option value="2009">2009</option>
</select>
<input type="hidden" class="hideleft" name="kr_outWd" size="5" onFocus="this.blur()">
</div></td>
</tr>
<tr>
<td align="right" nowrap><b>N&uacute;mero de noches:&nbsp;</b></td>
<td nowrap><input type=text class=hideleft name=noches size=8 onFocus=this.blur()></td>
</tr>
<tr>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<td align="right" colspan="2" >&nbsp;</td>
</tr>
</table>
</form>


:wink: Si alguno tiene una sugerencia mejor es bien recibida, tambien si alguien le hace alguna modificacion seria bueno que se publicara asi todos ganariamos jiji =)

Por eliza

4 de clabLevel



Genero:Femenino  

msie
Citar            
MensajeEscrito el 27 Nov 2006 12:04 am
Yo utilizo estas funciones:

Código :

function numDias(d,m,a){
  m = (m + 9) % 12;
  a = a - Math.floor(m/10);
  return 365*a+Math.floor(a/4)-Math.floor(a/100)+Math.floor(a/400)
            +Math.floor((m*306+5)/10)+d-1 
}
function difDias(d1,m1,a1,d2,m2,a2){
   return numDias(d2,m2,a2) - numDias(d1,m1,a1)
}


ejemplos:
trace (difDias(31,12,1992,1,1,1993)) // 1
trace (difDias(28,2,1992,1,3,1992)) // 2
trace (difDias(28,2,1900,1,3,1900)) // 1 (1900 no fué bisiesto)
trace (difDias(28,2,2000,1,3,2000)) // 2 (2000, excepción, si fue bisiesto)

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

msie
Citar            
MensajeEscrito el 30 Nov 2006 08:22 pm
Teseo

:lol: Ya probé tu script pero no me esta funcionando con las siguientes fechas

Fecha 1: 29/02/2008
Fecha 2: 01/03/2008

En realidad no entiendo el por que , no me funciona para años bisiestos, fin y comienzo de año y lo mismo con el mes

Por eliza

4 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 30 Nov 2006 08:28 pm
Por cierto zah si vi el link que me comentas, pero no me sirvio, estoy utilizando javascript con php y no estoy utilizando flash, no se si para el caso sea lo mismo pero no me sirvio gracias :oops:

Por eliza

4 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 30 Nov 2006 10:45 pm
Pues algo has copiado mal porque funciona correctamente:
Estaba supertesteado y , además, es una fórmula matemática antiquísima que llevo usando 30 años.......
ten en cuenta que todas las divisiones siempre son de valor entero.
Lo que no sirve es para años anteriores a 1, (no hay año 0) y por eso diferencias entre años anteriores a 1 y posteriores las calcula mal ( tengo la corrección, pero no la puse para no complicar el código al añadirla).

Salidas:
trace (difDias(29,2,2008,1,3,2008)) // 1 correcto
trace (difDias(31,12,1992,1,1,1993)) // 1 correcto
trace (difDias(30,3,2006,1,4,2006)) // 2 correcto
trace (difDias(28,2,2004,1,3,2004)) // 2 correcto

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

msie
Citar            
MensajeEscrito el 01 Dic 2006 05:45 pm
Teseo

:cry: Entonces no entiendo que hice mal lo estoy colocando dentro de un script y lo estoy mandando llamar en mis botones, me esta funcionando correctamente, pero como dije cuando es cambio de mes o de año no me funciona mira coloco el script como lo tengo en mi pagina y me dices que esta mal entonces

<script language="JavaScript">
function numDias(d,m,a)
{
m = (m + 9) % 12;
a = a - Math.floor(m/10);
return 365*a+Math.floor(a/4)-Math.floor(a/100)+Math.floor(a/400)
+Math.floor((m*306+5)/10)+d-1
}

function difDias(form)
{
d1=form.dia.value;
m1=form.mes.value;
a1=form.ano.value;

d2=form.dia2.value;
m2=form.mes2.value;
a2=form.ano2.value;

dias=numDias(d2,m2,a2) - numDias(d1,m1,a1);

form.noches.value=dias;
return false
}

</script>

<input name="noches" type="text" id="noches" onClick="javascript:difDias(formperiodo);">

Bueno haber si puedes ayudarme de antemano muchas gracias

Por eliza

4 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 01 Dic 2006 05:57 pm
Si es una duda de JavaScript, va en el foro de Javascript :bofh:

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.