https://foro.gambas-es.org/viewtopic.php?f=1&t=7694
-----------------------------------
gambafeliz
Domingo, 08 Septiembre 2019, 08:47

DateDiff No Me Funciona O No La Entiendo
-----------------------------------
Hola,

He puesto esto:

Print DateDiff(Now, "01/09/2019 20:22:27", gb.Day)

y me devuelve

-241

Según las instrucciones dice que la primera fecha es la mayor y la segunda la menor además he comprobado que siguen el mismo formato seria:
Fecha1 = 08/09/2019 hh:nn:ss
Fecha2 = 01/09/2019 20:22:27

por que me devuelve -241, por favor, ¿alguien me lo aclara?

Gracias.


-----------------------------------
Shell
Domingo, 08 Septiembre 2019, 09:03

Re: DateDiff No Me Funciona O No La Entiendo
-----------------------------------
GambaFeliz:

Compara con la ayuda en inglés. 

http://gambaswiki.org/wiki/lang/datediff

Traducción incorrecta a español.

Saludos


-----------------------------------
Shell
Domingo, 08 Septiembre 2019, 09:07

Re: DateDiff No Me Funciona O No La Entiendo
-----------------------------------
Ejemplo simple:

[code linenumbers=false syntax=gambas]
Print DateDiff("01/01/2015", "01/01/2016", gb.Year)
[/code]

Resultado:

[quote]
1
[/quote]

En el caso de arriba las fechas están en formato USA. mm/dd/yy

También puedes crear una fecha.

[code linenumbers=false syntax=gambas]
Print DateDiff(Date(2015, 01, 01), Date(2016, 01, 01), gb.Year)
[/code]


Saludos


-----------------------------------
gambafeliz
Domingo, 08 Septiembre 2019, 09:56

Re: DateDiff No Me Funciona O No La Entiendo
-----------------------------------
[quote user="Shell" post="46168"]

En el caso de arriba las fechas están en formato USA. mm/dd/yy

También puedes crear una fecha.

[code linenumbers=false syntax=gambas]
Print DateDiff(Date(2015, 01, 01), Date(2016, 01, 01), gb.Year)
[/code]


Saludos[/quote]

Muchísimas gracias Shell *********** :mryellow: 

Sigo loco con DateDiff después de probar y probar nada me va. 

Solo me ha funcionado bien tu última info, con Date(year, month, day) lo demás no me funciona, ves el código y lo analizas y te pone loca la cabeza. Cuando combinas una fecha en String y la comparas con Now 

Diossss. Terminas loco loquito.

Muchichisimas Gracias de verdad......


-----------------------------------
Shell
Domingo, 08 Septiembre 2019, 14:00

Re: DateDiff No Me Funciona O No La Entiendo
-----------------------------------
GambaFeliz:

En tu primer ejemplo de arriba del todo. ¿ Era uno de septiembre ?.  :) 
Ten en cuenta que lo reconoce como 09/01..mm/dd/yyyy
Entrecomillado claro.

Pero eso creo que estarás acostumbrado si usas SQL. 

Hay algunos temas parecidos con preguntas sobre DateDiff en la comunidad.
Usa el buscador, encontraras unas cuantas referencias, no muchas.

A mi me pasó como a ti. Pero a mi nadie me contestoooo.. y fue entonces cuando conocí otros foros donde muchos toman:

 [img]https://foro.gambas-es.org/files/images/768/melasuda.jpg[/img] 

Aquí no tomamos eso.

Saludos


-----------------------------------
gambafeliz
Domingo, 08 Septiembre 2019, 14:47

Re: DateDiff No Me Funciona O No La Entiendo
-----------------------------------
[quote user="Shell" post="46173"]

 [img]https://foro.gambas-es.org/files/images/768/melasuda.jpg[/img] 

Aquí no tomamos eso.

Saludos[/quote]

 :mryellow:  :mryellow:  :mryellow:  :mryellow: 

Estas tu hoy muy botiquero. 

Que gracia, contigo al fin del mundo.


-----------------------------------
gambafeliz
Domingo, 08 Septiembre 2019, 22:22

Re: DateDiff No Me Funciona O No La Entiendo
-----------------------------------
Shell:

Mira lo que acabo de comprobar, que es, lo que me estaba volviendo loco:

   ' Estándar de Fechas según el origen
   ' ----------------------------------------------
   ' Fecha según España:   Día/Mes/Año
   ' Fecha según SQLite3:  Año/Mes/Día para el tipo TEXTO
   ' Fecha según Gambas: Día/Mes/Año pero al pasar a String Gambas3 hace una conversión directa a: [b]Mes/Día/Año[/b]

Por lo tanto Gambas3 trabaja con la fechas supongo locales, osea, Día/Mes/Año, pero cuando hace una conversión directa la pasa según el formato USA.

--Yo en lo personal pienso que Gambas3 se equivoca, ya que hace una conversión de por ejemplo -Now- a una variable tipo String pues que convierta también a formato local y no USA--

Estaría bien que opinéis los eruditos en Gambas3. Esto es verdaderamente interesante y educativo.


-----------------------------------
shordi
Domingo, 08 Septiembre 2019, 22:55

Re: DateDiff No Me Funciona O No La Entiendo
-----------------------------------
[quote user="gambafeliz" post="46183"]Shell:

Mira lo que acabo de comprobar, que es, lo que me estaba volviendo loco:

   ' Estándar de Fechas según el origen
   ' ----------------------------------------------
   ' Fecha según España:   Día/Mes/Año
   ' Fecha según SQLite3:  Año/Mes/Día para el tipo TEXTO
   ' Fecha según Gambas: Día/Mes/Año pero al pasar a String Gambas3 hace una conversión directa a: [b]Mes/Día/Año[/b]

Por lo tanto Gambas3 trabaja con la fechas supongo locales, osea, Día/Mes/Año, pero cuando hace una conversión directa la pasa según el formato USA.

--Yo en lo personal pienso que Gambas3 se equivoca, ya que hace una conversión de por ejemplo -Now- a una variable tipo String pues que convierta también a formato local y no USA--
[/quote]

Repito: Gambas no trabaja con fechas locales ni las fechas en gambas tienen el mes ni el día en ningún sitio concreto. 
Repito: Te estás dejando llevar por lo que tus ojos ven en la pantalla y desprecias todos los pasos intermedios.
Repito: Las fechas son números. Gambas trabaja con fechas.

[quote]Mira lo que acabo de comprobar, que es, lo que me estaba volviendo loco:[/quote]

¿Qué entiendes por comprobar? ¿Que has usado unas funciones o un programa del que ignoras cómo traduce las fechas (dbsqlitebrowser o, phpmyadmin o, si me apuras, sqlite en consola y te dan resultados distintos?
¿Sabes qué te resultado te daría sqlite si tuvieses el lenguaje del SO en Inglés, o en francés?

Las Fechas, insisto, no son cadenas de caracteres en ningún entorno: Son números. 
Sospecho que dado que tus datos parten de un csv como cadenas y que ante la indefinición endémica de tipo de dato de SQLite, te has abonado a aquello de "Sqlite guarda como tipo nativo de fecha las (dos o tres tipos que no interesan y después) cadenas de caracteres". y das por sagrado que esa es "la manera". Pues no. Sqlite admite que el tipo definido como fecha sea una cadena pero también te advierte que "No hay una manera directa de representar los tipos de fecha, por lo que se deberán usar las funciones de conversión intrínsecas" ( cito de memoria). 

Las fechas en Gambas no son cadenas de caracteres y en cuanto conviertes tus cadenas a fechas estás trabajando con números. A una cadena de caracateres no puedes aplicarle operaciones aritméticas (datediff) ni sumas y restas de usos horarios (locales del sistema).
Eso sólo se puede hacer con números.

El único problema que tienes es que no comprendes bien qué hacen y qué tipo de dato necesitan para trabajar las funciones de fecha.
Por ejemplo, dices:
[quote]--Yo en lo personal pienso que Gambas3 se equivoca, ya que hace una conversión de por ejemplo -Now- a una variable tipo String pues que convierta también a formato local y no USA--
[/quote]
De las ayudas: 
[quote]Now

dTime = Now [ ( ) ][b] AS Date[/b]

Devuelve la fecha y hora actual.
[/quote]
Es decir now devuelve una fecha, es decir, un número compuesto de dos números. No una cadena. Para ver el valor devuelto por now debes usar una función de conversión. Para imprimir el valor en consola debes usar una función de conversión.
¿Sabías, por ejemplo, que print utiliza la conversión de la función str()? Es decir que si haces print now() estás usando la función str para ver esos números.
¿Y quieres ver la fecha convertida a cadena local con o sin los parámetros de localización locales (uso horario, horario de verano, etc)?

En otras palabras: No puedes "ver" un valor fecha, hay que convertirlo antes... y eso queda en manos de las funciones de cada entorno.

Copio y pego (me autocito, ¡toma ya!) la respuesta que dí en otro hilo similar a éste no hace mucho:
[quote]No exactamente. Tenéis que tener en cuenta que las fechas son números y no tienen formato per se. Para verlas hay que convertirlas pero... ¿Qué fecha queremos ver, la que figura en la base de datos o nuestra fecha local equivalente?¿y qué fecha queremos grabar en la base de datos, la nuestra local o la fecha del servidor? Es decir, hay fechas absolutas (que sería directamente la que hay en la BD, sin más) y fechas relativas (que serían la traducción de esa fecha a nuestro horario local).
Si quiero saber a qué hora se subió un post a una Base de Datos y me dice que a las tres de la mañana ¿son las tres de la mañana mías o las de venezuela, por ejemplo, país del autor del post?
gambas contempla ambas posibilidades y nos facilita la labor... pero hay que entenderlo

Considedad éste código:
Código: [Descargar] [Ocultar] [Seleccionar]
f = Val("18/2/19 00:00") 'devuelve 18/02/2019 00:00:00 como fecha
Str=str(f) 'devuelve "18/02/2019 00:00:00" Es decir, f convertida a cadena
Str=CStr(f) 'devuelve "02/17/2019 22:00:00" es decir: Hora UTC - localización (UTC+2=horario de verano en España. Al restar las dos horas, cambiamos de día)
f2 = CDate("2/18/19 00:00") 'devuelve 18/02/2019 02:00:00. Es decir: Hora UTC + localización.
 


Resumiendo:
Val y Str son inversas y manejan horas absolutas.
Cdate y Cstr son inversas y aplican los parámetros de Localización al valor recibido.[/quote]

Saludos.


-----------------------------------
gambafeliz
Lunes, 09 Septiembre 2019, 07:46

Re: DateDiff No Me Funciona O No La Entiendo
-----------------------------------
Shordi:

Voy a responderte a poquito a poco, vale.

Según te he entendido. Yo te voy a responder de forma radical y tu ya me corriges. 

Fechas (DATE) = Son números y como números deben tratarse. ¿Es así?

--- Mi mayor fallo es tratar churras con merinas, osea, Fechas (números) y cadenas. --

Con lo cual según te entiendo es que primero como ley, debo pasar las expresiones de cadenas a su equivalente en número, osea, expresión de fecha a Date.

Pero mira este ejemplo, 

Yo tengo una expresión de fecha guardada en un archivo .conf como ya sabes por settings, osea, Now, pero antes lo formateo con Format y lo guardo en .conf

Corrige si me equivoco:

1. [b]Primer fallo[/b], debo guardar Now sin formatear en el .conf, no debo tratarlo son date y debo guardar como date, ¿es así?
2. Al recuperar del conf. la recupero en una variable directa, osea As Date, ¿es así?
3. Ya la puedo tratar con DateDiff ya que esta hace la diferencia entre dos Date, ¿es así?

Por lo que mi fin es, esto:

Dim iDesface As Integer = DateDiff(dConf, Now, gb.Second) ' lo pongo así para obtener en positivo ya que me gusta mas así pero lo estrictamente correcto según advierte Gambas es poner la fecha mayor antes que la fecha menor, el resultado es tener un Integer negativo (es lo correcto) o tener un integer positivo (es lo que me gusta a mi)

Bueno yo he terminao tu me dices si entendí tus explicaciones.


-----------------------------------
shordi
Lunes, 09 Septiembre 2019, 08:41

Re: DateDiff No Me Funciona O No La Entiendo
-----------------------------------
[quote]
1. Primer fallo, debo guardar Now sin formatear en el .conf, no debo tratarlo son date y debo guardar como date, ¿es así?
[/quote]
.conf es un archivo de texto por lo que tendrás que guardar la fecha convertida en texto ¿Función a emplear? Str (ver el ejemplo de más arriba)
[quote]
2. Al recuperar del conf. la recupero en una variable directa, osea As Date, ¿es así?
[/quote]
Exacto, pero al estar almacenada como cadena la conviertes en date. ¿Función a emplear? val (ver el ejemplo de más arriba)
[quote]
3. Ya la puedo tratar con DateDiff ya que esta hace la diferencia entre dos Date, ¿es así?[/quote]
Así es.


-----------------------------------
gambafeliz
Lunes, 09 Septiembre 2019, 10:13

Re: DateDiff No Me Funciona O No La Entiendo
-----------------------------------
[quote user="shordi" post="46193"][quote]
1. Primer fallo, debo guardar Now sin formatear en el .conf, no debo tratarlo son date y debo guardar como date, ¿es así?
[/quote]
.conf es un archivo de texto por lo que tendrás que guardar la fecha convertida en texto ¿Función a emplear? Str (ver el ejemplo de más arriba)
[quote]
2. Al recuperar del conf. la recupero en una variable directa, osea As Date, ¿es así?
[/quote]
Exacto, pero al estar almacenada como cadena la conviertes en date. ¿Función a emplear? val (ver el ejemplo de más arriba)
[quote]
3. Ya la puedo tratar con DateDiff ya que esta hace la diferencia entre dos Date, ¿es así?[/quote]
Así es.[/quote]

Perfect !!!  

Yo sigo tus instrucciones y ya te cuento si observo contra-indicaciones de tu prospecto, Gracias, un amigo

Nota: Para quien le sirva. He observado que es fundamental el uso de Date = Val(string) al recuperar la "fecha" de .conf por que sino se pone, me devuelve a mi "Fecha Hora:MIN" la misma +2 horas (En España) | (resultado no deseable)


