Una de las personas que solicitan mi ayuda me preguntó cómo se calcula una fecha partiendo de otra fecha a la que se sumaban los días de un campo de un formulario.
Estas operaciones las necesitaba hacer en el navegador, por lo que debería estar desarrollada en JavaScript.
Leyendo el manual de PHPRunner y algunos otros ejemplos en internet he conseguido hacer el cálculo y , además, lo he ampliado para obtener los días que hay entre dos fechas.
Objetivo
Hacer cálculos utilizando campos de fecha en JavaScript.
Solución Técnica
El ejemplo que he hecho tiene este aspecto:
No he publicado el ejemplo porque es muy poco el código que tengo que compartir con vosotros.
Como podemos ver tenemos 3 campos. Una fecha inicial, un número de días que tenemos que sumar y una fecha final, que es calculada con los 2 campos primeros. También, si se modifica la fecha final el aplicativo calcula los días de diferencia entre la fecha inicial y la final.
El código del evento «javascript Onload event» en ADD, es:
var ctrl_Ini = Runner.getControl(pageid, 'date_ini'); var ctrl_Days = Runner.getControl(pageid, 'days'); var ctrl_End = Runner.getControl(pageid, 'Date_end'); ctrl_Days.setValue(0); // Defauklt Value Only ADD // ctrl_End.makeReadonly(); ctrl_Ini.on('change', function() { let value_init = ctrl_Ini.getValue(); // console.log(value_init); let days = parseInt(ctrl_Days.getValue()); // Important, parse to INT value_end = value_init.addDays(days); // console.log(value_end); ctrl_End.setValue(value_end); }); ctrl_Days.on('change', function() { let value_init = ctrl_Ini.getValue(); // console.log(value_init); let days = parseInt(ctrl_Days.getValue()); // Important, parse to INT value_end = value_init.addDays(days); // console.log(value_end); ctrl_End.setValue(value_end); }); ctrl_End.on('change', function() { let value_init = ctrl_Ini.getValue(); let value_end = ctrl_End.getValue(); let value_days = datediff( value_init, value_end); ctrl_Days.setValue(value_days); }); function datediff(first, second) { return Math.round((second - first) / (1000 * 60 * 60 * 24)); } Date.prototype.addDays = function(days) { let date = new Date(this.valueOf()); date.setDate(date.getDate() + days); return date; }
En EDIT, es el mismo código salvo que la línea 5 se comenta o se elimina.
Espero que os ayude y para cualquier necesidad de explicación, indícamelo a través de mi email [email protected]