JavaScript - calculo de fechas que cambie valor al activar casilla

 
Vista:
Imágen de perfil de Eduardo
Val: 159
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

calculo de fechas que cambie valor al activar casilla

Publicado por Eduardo (176 intervenciones) el 23/11/2022 17:51:49
Hola a todos tengo el siguiente codigo que hace el calculo en dias de 2 fechas... (contando el dia de inicio) como hago para que al activar la casilla y las fechas sean iguales esta cambie a 1 (lo hace en el código pero al activar la casilla el valor cambie a cero 0)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>
    <script>
function calculardiasDiscount() {
        var fecha1 = new Date(document.getElementById("fecha1").value);
        var fecha2 = new Date(document.getElementById("fecha2").value);
		var justifica = new Date(document.getElementById("justifica").value);
 
        var actualDate = new Date();
		          var diff = fecha2.getTime() - fecha1.getTime();
            document.getElementById("diasincapacidad").value = Math.round(diff / (1000 * 60 * 60 * 24))+1;
        }
        if (fecha2 == fecha1 && justifica == 'Si') {
            //alert("La fecha final de la promoción debe ser mayor a la fecha inicial");
            document.getElementById("diasincapacidad").value = 1;
        }else{
		   document.getElementById("diasincapacidad").value = 0;
		}
</script>
 
<body>
<table width="91%" border="0" align="center" cellpadding="2" cellspacing="0">
  <tr>
    <td width="169" height="22" bgcolor="#FF954D" style="text-align: right">Fecha Inicio:</td>
    <td width="144" bgcolor="#FF954D" style="text-align: left"><!-------------- DATE PIKER 1 ---------------------------------------------------------------->
      <span class="input-append date">
        <input style="text-align:left;" name="fecha1" type="date" id="fecha1" required="required" oninput="calculardiasDiscount()"/>
      </span></td>
    <td colspan="3" bgcolor="#FF954D" style="text-align: left"><!------
              <input name="todoeldia" type="checkbox" id="todoeldia" onchange="check(this)" value="si"/>
              Todo el dia---></td>
    <td width="148" bgcolor="#FF954D" style="text-align: left"> </td>
  </tr>
  <tr>
    <td bgcolor="#FF954D" style="text-align: right">Fecha Final: </td>
    <td bgcolor="#FF954D" style="text-align: left"><!-------------- DATE PIKER 2 ---------------------------------------------------------------->
      <span class="input-append date">
        <input style="text-align:left;" name="fecha2" type="date" id="fecha2"  required="required" oninput="calculardiasDiscount()"/>
      </span></td>
    <td width="34" bgcolor="#FF954D" style="text-align: left"> </td>
    <td width="102" bgcolor="#FF954D" style="text-align: left"> </td>
    <td width="41" bgcolor="#FF954D" style="text-align: left"> </td>
    <td bgcolor="#FF954D" style="text-align: left"> </td>
  </tr>
  <tr>
    <td bgcolor="#FF954D" style="text-align: right">Dias Incapacidad:</td>
    <td bgcolor="#FF954D" style="text-align: left"><input name="diasincapacidad" type="number" required="required" id="diasincapacidad" style="width:20%;" size="5"/></td>
    <td bgcolor="#FF954D" style="text-align: left"> </td>
    <td bgcolor="#FF954D" style="text-align: left"> </td>
    <td bgcolor="#FF954D" style="text-align: left"> </td>
    <td bgcolor="#FF954D" style="text-align: left"> </td>
  </tr>
  <tr>
    <td bgcolor="#FF954D" style="text-align: right">Presenta Incapacidad:</td>
    <td colspan="5" bgcolor="#FF954D" style="text-align: left"><input name="justifica" type="checkbox" id="justifica" value="Si" onclick="checkfunction();calculardiasDiscount()"/>
      <div id="msg"></div></td>
  </tr>
</table>
</body>
</html>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 40
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

calculo de fechas que cambie valor al activar casilla

Publicado por Marlon (90 intervenciones) el 25/11/2022 01:03:26
Hola, ya lo solucionaste?

Si no, puedes explicar un poco mejor lo que intentas hacer.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduardo Arroyo
Val: 159
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

calculo de fechas que cambie valor al activar casilla

Publicado por Eduardo Arroyo (176 intervenciones) el 25/11/2022 01:20:07
Hola y gracias por responder.. no aun no.. ya te cuento sabes que la resta de las fechas da el valor en días.. por ejemplo si estas fechas son iguales el valor será 1 lo q me gustaría q al activar la casilla este valor 1 cambie a cero ya q es para indicar que no se apprtaron unos documentos para que se de un día de incapacidad.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 40
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

calculo de fechas que cambie valor al activar casilla

Publicado por Marlon (90 intervenciones) el 25/11/2022 02:53:20
Bueno el primer error que veo es que el condicional de la linea 17 esta fuera de la función y creo que debería ir dentro.

Ahora, para saber si una casilla esta activada o nó, se utiliza el "cheked" que devuelve true o false dependiendo

1
var justifica = document.getElementById("justifica").checked;

no entiendo, porque tenias esa linea dentro de un objeto DATE?

definí la operacion MATH detro de una variable para poder utilizar ese valor en el condicional

1
let = dateResult = Math.round(diff / (1000 * 60 * 60 * 24))+1;

y cambie todo el condicional por el siguiente:

1
2
3
if(dateResult == 1 && justifica == true){
    document.getElementById("diasincapacidad").value = 0;
}

que lo que hace es comprobar si el resultado de la fecha es igual a 1 (ya que serian la misma fecha) y comprueba si la casilla esta activada (true) de lo contrario cambiaria a 1 si esta esta desactivada.

entonces todo quedaria asi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function calculardiasDiscount() {
    var actualDate = new Date();
    var fecha1 = new Date(document.getElementById("fecha1").value);
    var fecha2 = new Date(document.getElementById("fecha2").value);
 
    var justifica = document.getElementById("justifica").checked; // aqui obtiene si esta activada o no, devuelve true o false
 
    var diff = fecha2.getTime() - fecha1.getTime();
    let = dateResult = Math.round(diff / (1000 * 60 * 60 * 24))+1;
    document.getElementById("diasincapacidad").value = dateResult
    if(dateResult == 1 && justifica == true){
        document.getElementById("diasincapacidad").value = 0;
    }
}

Espero te funcione y sea lo que estas buscando, cualquier cosa pregunta.
Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduardo
Val: 159
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

calculo de fechas que cambie valor al activar casilla

Publicado por Eduardo (176 intervenciones) el 25/11/2022 03:09:09
marcha excelente pero ahora entre en un dilema imaginate que tuve que modificar el codigo ya que era al contrario si ambas fechas son iguales da dias cero (normalmente) a no ser que la casilla sea oprimida para que de 1 dia po rloq ue hice este cambio

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<script>
function calculardiasDiscount() {
    var actualDate = new Date();
    var fecha1 = new Date(document.getElementById("fecha1").value);
    var fecha2 = new Date(document.getElementById("fecha2").value);
 
    var justifica = document.getElementById("justifica").checked; // aqui obtiene si esta activada o no, devuelve true o false
 
    var diff = fecha2.getTime() - fecha1.getTime();
    let = dateResult = Math.round(diff / (1000 * 60 * 60 * 24));
    document.getElementById("diasincapacidad").value = dateResult
    if(dateResult == 0 && justifica == true){
        document.getElementById("diasincapacidad").value = 1;
    }
}
</script>

por lo que tuve que para que de cero tuve que quitar el +1 al final de esta linea

1
let = dateResult = Math.round(diff / (1000 * 60 * 60 * 24))+1;

pero ahora entro en el dilema que no me cuenta el dia inicial en la resta de lso dias... que le hago..

es decir si es por ejemplo si la:

fecha inicial: 24/11/2022
y la fecha final es: 26/11/2022

da como resultado (por no tener el +1) Dias 2 y debería ser tres (por que se debe iniciar el conteo desde el mismo dia Por fiss!!!

es decir si las fecha son iguales (el mismo dia) dar Cero (0) a no ser qu ela casilla este marcada marca 1 (si ambas fechas son iguales..
en cambio si ambas fechas son diferentes dar el resultado +1 (para que asi la resta incluya el dia inicial)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduardo
Val: 159
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

calculo de fechas que cambie valor al activar casilla

Publicado por Eduardo (176 intervenciones) el 25/11/2022 13:17:56
lo he hecho asi algunos ajustes pero no logro hacer que cuando las dos fechas sean iguales de cero a menos que se active la casilla da 1 de resto debe dar la resta normal +1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<script>
function calculardiasDiscount() {
    var actualDate = new Date();
    var fecha1 = new Date(document.getElementById("fecha1").value);
    var fecha2 = new Date(document.getElementById("fecha2").value);
 
    var justifica = document.getElementById("justifica").checked; // aqui obtiene si esta activada o no, devuelve true o false
 
    var diff = fecha2.getTime() - fecha1.getTime();
    let = dateResult = Math.round(diff / (1000 * 60 * 60 * 24));
   //document.getElementById("diasincapacidad").value = dateResult;
    if(fecha1 == fecha2){
        document.getElementById("diasincapacidad").value = 0;
    }
	if(dateResult == 1 && justifica == true){
        document.getElementById("diasincapacidad").value = 1;
    }else{
		document.getElementById("diasincapacidad").value = dateResult+1;
		}
	if(fecha1 > fecha2){
        alert("La fecha Inicial no puede ser mayor a la Final");
		document.getElementById("diasincapacidad").value = 0;
    }
}
</script>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 40
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

calculo de fechas que cambie valor al activar casilla

Publicado por Marlon (90 intervenciones) el 27/11/2022 19:51:59
1
if(fecha1 == fecha2)

No puedes comparar estas dos variables de esta forma, aquí lo que estas preguntando es que si fecha1 que es un objeto que tiene funciones y metodos es igual a otro objeto (fecha2) y obviamente eso no es correcto, son 2 objetos diferentes.....si quieres comparar 2 fechas debes llamar el metodo de estos objetos que devuelven la fecha, asi:

1
fecha2.getTime() == fecha1.getTime()

te recomiendo utilizar
1
console.log()
para saber que valor te esta devolviendo una función, variable....etc.

para resolver lo de la suma podrías hacer lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function calculardiasDiscount() {
        var actualDate = new Date();
        var fecha1 = new Date(document.getElementById("fecha1").value);
        var fecha2 = new Date(document.getElementById("fecha2").value);
 
        var justifica = document.getElementById("justifica").checked; // aqui obtiene si esta activada o no, devuelve true o false
        var diff = fecha2.getTime() - fecha1.getTime();
 
        let = dateResult = Math.round(diff / (1000 * 60 * 60 * 24)) + 1;
        //aqui dejamos que el input tome el valor por defecto que arroja la operacion "dateResult"
        document.getElementById("diasincapacidad").value = dateResult
        //Ya aqui cambiara dicho valor en caso de que el condicional se cumpla
        if (dateResult == 1){ // si es igual a 1 es por que las fechas son iguales
            if(!justifica){ // si la casilla esta desactivada entonces le resta una unidad al resultado para volverlo 0
                document.getElementById("diasincapacidad").value = dateResult - 1
            }
        }
    }

Espero te funcione!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Eduardo
Val: 159
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

calculo de fechas que cambie valor al activar casilla

Publicado por Eduardo (176 intervenciones) el 30/11/2022 19:01:59
Perfecto perfecto Mil graciasssss +100
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar