# Velneo 35 y manejo de fechas en nuevo motor de JavaScript

**URL:** <https://foros.velneo.com/t/velneo-35-y-manejo-de-fechas-en-nuevo-motor-de-javascript/11499>\
**Category:** Velneo\
**Created:** [21 Junio, 2024 23:03 UTC](https://foros.velneo.com/t/velneo-35-y-manejo-de-fechas-en-nuevo-motor-de-javascript/11499 "2024-06-21T23:03:58Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![marco\_rangel](https://avatars.discourse-cdn.com/v4/letter/m/8797f3/32.png) [@marco\_rangel](https://foros.velneo.com/u/marco_rangel)\
**Post date:** [21 Junio, 2024 23:03 UTC](https://foros.velneo.com/t/velneo-35-y-manejo-de-fechas-en-nuevo-motor-de-javascript/11499/1 "2024-06-21T23:03:58Z")

</div>

Primero, creo que sería prudente no pasarse a la versión 35 de Velneo, ya que con el nuevo motor de JavaScript muchas cosas se han descompuesto (ya me han pasado varias, afortunadamente no son en proceso críticos, por eso no me saltaron en mi revisión).

Tengo una variable global en memoria del tipo Fecha llamada TC\_DATE.  
Desde un formulario, desde un evento, a esta variable le asigno el valor del campo de la tabla en edición, el campo es de tipo Fecha.  
También aparte tengo un proceso con el que asigno a esta misma variable con la función currentDate().  
Desde cualquiera de estos lugares, siempre estoy seguro de que lo que tengo es una fecha “plana”.  
En cualquiera de ambos casos, ya una vez asignada la variable TC\_DATE, mando llamar un proceso en JavaScript en donde tengo el siguiente código:

var fecha = theApp.globalVarToDate(“Recicla\_dat/TC\_DATE”);

Para depurar ahora tuve que hacerlo con el viejo y confiable “alert” y revisar el valor en la variable fecha.  
Suponiendo que a TC\_DATE le asigno la fecha de hoy 21/06/2024 (por cualquiera de los métodos arriba descritos), el resultado que me arroja el alert es:  
jue. jun. 20 18:00:00 2024 GMT -0600  
{meme con cara de “ehhh!!!???”}

1. Se supone que estoy trabajando solo con fechas y no con fecha/hora
2. globalVarToDate me debería de regresar también una fecha plana y lo que hace es interpretar que la variable TC\_DATE es UTC y “me hace el favor” de _convertirla_ a GMT -0600 **restando 6 horas a la fecha (por eso las 18:00:00)**, provocando con esto que en adelante comience a trabajar con la fecha “20/06/2024” y todos mis cálculos se vayan al diablo.

¿Algún alma caritativa (cajum paco satue cajum) que me apoye a resolver este entuerto?  
Estoy buscando funciones para “corregir” este problema, pero al momento no encuentro algo que me ayude.

Saludos!

---

<div class="post-metadata">

**Author:** ![correo](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/correo/32/5689_2.png) [@correo](https://foros.velneo.com/u/correo)\
**Post date:** [24 Junio, 2024 22:16 UTC](https://foros.velneo.com/t/velneo-35-y-manejo-de-fechas-en-nuevo-motor-de-javascript/11499/2 "2024-06-24T22:16:04Z")

</div>

Hola marco\_rangel.

Solo tienes que recordar que en **JavaScript** solo existe el el objeto **Fecha/Hora** que equivale al tipo nativo [Tiempo](https://doc.velneo.com/velneo-vdevelop/proyectos-objetos-y-editores/proyecto-de-datos/variable#tiempo) de Velneo.

> Las funciones \*ToDate() y \*ToTime() que se aplican a las **variables**  **locales** , **variables**  **globales** y a los **campos** de las tablas solo crean confusión porque en JavaScript no existen los datos de tipo Fecha u Hora de Velneo nativo.

La solución pasa por varias opciones que cada programador deberá evaluar:

- No usar nunca los tipos Fecha y Hora de Velneo. Usar exclusivamente el tipo Tiempo que guarda información del UTC y es compatible con el dato Fecha/Hora del JavaScript del API.
- Si se van a usar los tipos Fecha y Hora de Velneo establecer un sistema de intercambio entre la aplicación nativa y el API de Velneo. Por ejemplo pasar las Fechas y las Horas como un string.

Saludos  
Paco Satué

---

<div class="post-metadata">

**Author:** ![marco\_rangel](https://avatars.discourse-cdn.com/v4/letter/m/8797f3/32.png) [@marco\_rangel](https://foros.velneo.com/u/marco_rangel)\
**Post date:** [24 Junio, 2024 22:36 UTC](https://foros.velneo.com/t/velneo-35-y-manejo-de-fechas-en-nuevo-motor-de-javascript/11499/3 "2024-06-24T22:36:29Z")

</div>

Santo cielo!!! esto llevará a revisar un montón de cosas en la aplicación.  
Muchas gracias por las anotaciones Paco.  
Mientras para solucionar donde me saltó usé el siguiente código, por si alguien le interesa:

var fecha = theApp.globalVarToDate(“Recicla\_dat/TC\_DATE”);  
var fechaUTC = new Date(fecha.getTime() + fecha.getTimezoneOffset() \* 60000);  
fecha = fechaUTC;

La primera línea era la que ya tenía (y dejó de funcionar). Sé que me puedo ahorrar la tercer línea, pero lo tenía así cuando estaba haciendo las pruebas y estaba comparando los valores de fecha y fechaUTC y así lo dejé finalmente.  
Pues tocará revisar entonces un montón de código

---

<div class="post-metadata">

**Author:** ![emilianorubio](https://avatars.discourse-cdn.com/v4/letter/e/e36b37/32.png) [@emilianorubio](https://foros.velneo.com/u/emilianorubio)\
**Post date:** [26 Junio, 2024 07:50 UTC](https://foros.velneo.com/t/velneo-35-y-manejo-de-fechas-en-nuevo-motor-de-javascript/11499/4 "2024-06-26T07:50:53Z")

</div>

O no lo capto o no lo veo.  
Me explico:  
En mi servidor **version 34.1**  
Tengo un proceso “A” en js que recupera una variable tipo fecha (inicializada desde velneo con currendate()) que le pasa otro proceso “B”. Hoy es 26/06/2024 hora 09:XX:XX  
El proceso “A”:  
var fecha = theRoot.varToDate(“FECHA\_SOLO”);  
alert(fecha);  
Me devuelve: **Wed Jun 26 2024 00:00:00 GMT+0200 (Hora de ver. Europa Occidental)**

Por lo cual esto no es de la version 35, ya pasa en la 34  
Si al proceso “B” le añado  
var fechaUTC = new Date(fecha.getTime() + fecha.getTimezoneOffset() \* 60000);  
fecha = fechaUTC;  
alert(fecha);  
Me devuelve: Tue Jun 25 2024 22:00:00 GMT+0200 (Hora de ver. Europa Occidental) **¡¡INCORRECTO en mi servidor!!**  
La verdad es que trabajar con fechas siempre es muy lioso, sea el lenguaje de programación que sea  
Voy a probar en la version 35.1…

---

<div class="post-metadata">

**Author:** ![emilianorubio](https://avatars.discourse-cdn.com/v4/letter/e/e36b37/32.png) [@emilianorubio](https://foros.velneo.com/u/emilianorubio)\
**Post date:** [26 Junio, 2024 08:01 UTC](https://foros.velneo.com/t/velneo-35-y-manejo-de-fechas-en-nuevo-motor-de-javascript/11499/5 "2024-06-26T08:01:55Z")

</div>

Version 35.1, a las 10:01 :  
var fecha = theRoot.varToDate(“FECHA\_SOLO”);  
mi. jun. 26 02:00:00 2024 GMT+0200

Con  
var fechaUTC = new Date(fecha.getTime() + fecha.getTimezoneOffset() \* 60000);  
fecha = fechaUTC;

Devuelve  
mi. jun. 26 00:00:00 2024 GMT+0200  
**¡¡Correcto tu planteamiento marco\_angel!!**

Nada, me toca revisar código ( quisieramos pasar este fin de semana a la 35.1)

---

<div class="post-metadata">

**Author:** ![correo](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/correo/32/5689_2.png) [@correo](https://foros.velneo.com/u/correo)\
**Post date:** [26 Junio, 2024 11:49 UTC](https://foros.velneo.com/t/velneo-35-y-manejo-de-fechas-en-nuevo-motor-de-javascript/11499/6 "2024-06-26T11:49:14Z")

</div>

Hola emilianorubio.

Efectivamente, es un problema de siempre con Velneo, desde que se añadió el API y no se tuvo en cuenta que en JavaScript no hay datos de tipo Fecha ni de Hora.

Ya había problemas hace años con el paso de variables desde Velneo al API.  
[Fechas en formato ISO y hora UTC - Velneo - Velneo](https://foros.velneo.com/t/fechas-en-formato-iso-y-hora-utc/8633)

> Las fechas deben guardarse siempre con la **Hora UTC** y eso Velneo lo hace correctamente.  
> El problema surge con las variables **Fecha** que no tienen la **Hora** asignada y lo que hace el API es suponer que son las **00:00 horas UTC**.

La solución de marco\_rangel es otra de las chapuzillas a que nos obliga Velneo para resolver este tipo de cuestiones: sumar/restar a la Fecha obtenida en el API el Offset de la Hora de la Zona Horaria local.

Quizás la solución pasaría por modificar la función varToDate() para que no haga conversión de la Zona Horaria y tome siempre las 00:00 horas local.

Tenéis la aplicación del cloud **0PS\_MiAPI** con un ejemplo de paso de variables Fecha/Hora/Tiempo.

 ![image](https://canada1.discourse-cdn.com/flex035/uploads/velneo/original/2X/4/4f77abfd3b0de3de13c822bcde3e217ae562a7cc.png)

Saludos  
Paco Satué
