Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Cómo Poder Hacer Cálculo Que Indique Años, Meses Y Días Entre Dos Fechas
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Cómo Poder Hacer Cálculo Que Indique Años, Meses Y Días Entre Dos Fechas 
 
Hola amigos, he estado viendo cómo poder calcular el tiempo entre dos fechas, pero que me indique años, meses y días. Con DateDiff no se puede porque entiendo que solo puede resolver años o meses o días, pero no me sirve de ese modo.  Si alguien me puede orientar.  Se los agradezco.

Mis cordiales saludos.

Ubuntu 15.10
gambas 3.8.2
Unity
 



 
kike1965 - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cómo Poder Hacer Cálculo Que Indique Años, Meses Y Días Entre Dos Fechas 
 
Saca la diferencia entre las dos fechas en días y haz el cálculo tú mismo. Es simple: divide entre 365 el resto entre 30 y el resto son los días... más o menos.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cómo Poder Hacer Cálculo Que Indique Años, Meses Y Días Entre Dos Fechas 
 
shordi escribió: [Ver mensaje]
Saca la diferencia entre las dos fechas en días y haz el cálculo tú mismo. Es simple: divide entre 365 el resto entre 30 y el resto son los días... más o menos.


Gracias por responder Shordi, pero el problema es que no puedo aplicar matemática ya que en factor años, meses y días me encuentro con la dificultad de años bisiestos, meses con 28, 29, 30 ó 31 días.

Estoy tratando con esto, pero no me va

Public Sub Button1_Click()
  
  Dim A As Date
  Dim B As Date
  
  A = DateBox1.Value
  B = DateBox2.Value
  
  TextBox1.Text = Year(B) - Year(A)
    If Month(A) > Month(B) Then
    TextBox3.Text = TextBox3.Text - 1
  End If
  
  TextBox2.Text = Month(B) - Month(A)
    If Month(A) > Month(B) Then
      TextBox2.text = 12 - (TextBox2.Text * -1)
    Endif
    
  'TextBox3.Text =
  
End
 


Cordiales saludos.
 



 
última edición por kike1965 el Viernes, 06 Noviembre 2015, 22:56; editado 2 veces 
kike1965 - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cómo Poder Hacer Cálculo Que Indique Años, Meses Y Días Entre Dos Fechas 
 
Mirate este enlace:

http://cursogambas.blogspot.com.es/...y-datediff.html

Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cómo Poder Hacer Cálculo Que Indique Años, Meses Y Días Entre Dos Fechas 
 
jsbsan escribió: [Ver mensaje]
http://cursogambas.blogspot.com.es/2014/08/calculo-con-fechas-dateadd-y-datediff.html


Bueno, yo propondría:

Public Sub Main()

  Dim d1, d2 As Date
  Dim i As Integer
  
    d1 = Date(2010, 01, 01)
    d2 = Now
    
    i = DateDiff(d1, d2, gb.day)
    Print "Dias:", i
    
    Print i \ 365; ":"; (i Mod 365) \ 30; ":"; (i Mod 365) Mod 30

End

 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cómo Poder Hacer Cálculo Que Indique Años, Meses Y Días Entre Dos Fechas 
 
Prueba ésto:
Public Sub diferencia(dateDesde As Date, dateHasta As Date)
    Dim a, m, d As Integer
    Dim td As Date

    a = DateDiff(dateDesde, dateHasta, gb.Year)  
    a = IIf(DateAdd(dateDesde, gb.year, a) > dateHasta, a - 1, a)
    m = DateDiff(dateDesde, datehasta, gb.month) Mod 12
    td = DateAdd(datedesde, gb.year, a)
    m = IIf(DateAdd(td, gb.month, m) > datehasta, m - 1, m)
    td = DateAdd(td, gb.month, m)
    d = DateDiff(td, datehasta, gb.day)
    
    Print "Entre ";; dateDesde;; " a ";; dateHasta;; " hay ";; a;; " años,";; m;; " meses, ";; d;; " días"
    
End

 




===================
No podemos regresar
 
última edición por shordi el Sabado, 07 Noviembre 2015, 07:40; editado 1 vez 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cómo Poder Hacer Cálculo Que Indique Años, Meses Y Días Entre Dos Fechas 
 
shordi escribió: [Ver mensaje]
Prueba ésto:
Public Sub diferencia(dateDesde As Date, dateHasta As Date)
    Dim a, m, d As Integer
    Dim td As Date

    a = DateDiff(dateDesde, dateHasta, gb.Year)  
    a = IIf(DateAdd(dateDesde, gb.year, a) > dateHasta, a - 1, a)
    m = DateDiff(dateDesde, datehasta, gb.month) Mod 12
    td = DateAdd(datedesde, gb.year, a)
    m = IIf(DateAdd(td, gb.month, m) > datehasta, m - 1, m)
    td = DateAdd(td, gb.month, m)
    d = DateDiff(td, datehasta, gb.day)
    
    Print "Entre ";; dateDesde;; " a ";; dateHasta;; " hay ";; a;; " años,";; m;; " meses, ";; d;; " días"
    
End


Excelente Shordi, tenías toda la razón con DateDiff y DateAdd sí era posible.  Hay un detalle en el cálculo cuando involucra el mismo mes ya que suma los días pero no los transforma a meses, por ejemplo:

Citar:
Entre  14/11/1979 00:00:00  a  07/11/2015 00:00:00  hay  35  años, 0  meses,  358  días


Voy a revisarlo bien, muchas gracias Shordi
 



 
kike1965 - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cómo Poder Hacer Cálculo Que Indique Años, Meses Y Días Entre Dos Fechas 
 
...si te gusta complicarte la vida, puedes utilizar las funciones externas de la libreria de Libglib-2.0:  

Public Struct GTimeVal
  tv_sec As Long
  tv_usec As Long
End Struct


Library "libglib-2.0"

' GDateTime * g_date_time_new_local(gint year, gint month, gint day, gint hour, gint minute, gdouble seconds)
' Creates a new GDateTime corresponding to the given date and time in the local time zone.
Private Extern g_date_time_new_local(Gyear As Integer, Gmonth As Integer, Gday As Integer, Ghour As Integer, Gminute As Integer, Gseconds As Float) As Pointer

' GTimeSpan g_date_time_difference (GDateTime *end, GDateTime *begin)
' Calculates the difference in time between end and begin.
Private Extern g_date_time_difference(Gend As Pointer, Gbegin As Pointer) As Long

' GDateTime * g_date_time_new_from_timeval_local (const GTimeVal *tv)
' Creates a GDateTime corresponding to the given GTimeVal tv in the local time zone.
Private Extern g_date_time_new_from_timeval_local(tv As GTimeVal) As Pointer

' void g_date_time_get_ymd (GDateTime *datetime, gint *year, gint month, gint day)
' Retrieves the Gregorian day, month, and year of a given GDateTime.
Private Extern g_date_time_get_ymd(datetime As Pointer, Gyear As Pointer, Gmonth As Pointer, Gday As Pointer)


Public Sub Main()

  Dim t1, t2, dt As Pointer
  Dim a, m, d As Integer
  Dim dif As Long
  Dim tiva As New GTimeVal
  
    t1 = g_date_time_new_local(1979, 11, 14, 0, 0, 0)
    t2 = g_date_time_new_local(2015, 11, 7, 0, 0, 0)
    
    dif = g_date_time_difference(t2, t1)

    tiva.tv_usec = dif
    
    dt = g_date_time_new_from_timeval_local(tiva)
    
    g_date_time_get_ymd(dt, VarPtr(a), VarPtr(m), VarPtr(d))
    
    Print a - 1970; ":"; m - 1; ":"; d - 1

End

 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cómo Poder Hacer Cálculo Que Indique Años, Meses Y Días Entre Dos Fechas 
 
Citar:

Excelente Shordi, tenías toda la razón con DateDiff y DateAdd sí era posible.  Hay un detalle en el cálculo cuando involucra el mismo mes ya que suma los días pero no los transforma a meses, por ejemplo:

    Citar:
    Entre  14/11/1979 00:00:00  a  07/11/2015 00:00:00  hay  35  años, 0  meses,  358  días



Voy a revisarlo bien, muchas gracias Shordi

Perfecto, lo hice un tanto de correprisas anoche. Cuando lo tengas depurado súbelo para beneficio de todos... y mío, claro    
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cómo Poder Hacer Cálculo Que Indique Años, Meses Y Días Entre Dos Fechas 
 
Buenas a todos.
Pues vi el tema buscando aprender a usar este lenguaje y manipular fechas suele ser muy útil como pesado en ciertas ocasiones.
Hace menos de 24 horas que instale gambas y me puse a experimentar, vale, que sin experimentar nada se aprende.
Vi varios comentarios donde usáis varias funciones de manejo de datos fecha, pero yo como cabeza dura y anticuado probé algo mas rudimentario pero que según mis pruebas da buen resultado y aquí os dejo lo que logre.


Public Sub diferencia(f1 As Date, f2 As Date)
'f1 y f2 las fechas que pasamos a trabajar
    
   Dim  d As Integer
'variable d donde guardamos la cantidad de dias

d = DateDiff(f1, f2, gb.day) - Int(DateDiff(f1,f2,gb.year) / 4)

'a la cantidad de dias obtenida con DateDiff le resto el resultado entero de la cantidad de años dividido 4, Int(DateDiff(f1,f2,gb.year) / 4)
'con esto ajustamos el dia extra en los años bisiestos

anios.text = Int(d / 365)
'Anios es años(no me deja nombrar con ñ jaja), calculado a partir del entero de dividir los días entre 365

meses.text = Int(Int(((d / 365) - Int(d / 365)) * 365) / 30)

'Los meses los calculo restando el entero de años de dividir los días entre 365.
'Al decimal (menor que 1) restante lo multiplico por 30 y de ese resultado filtro la parte decimal para obtener meses enteros.

dias.text = Int((((((d / 365) - Int(d / 365)) * 365) / 30) - Int((((d / 365) - Int(d / 365)) * 365) / 30)) * 30)

'Del mismo modo que para calcular los meses pero esta vez restando los meses enteros y nuevamente al resto menor que 1 lo multiplico por 30 para obtener dias y de ese resultado uso el entero tbn.
End
 


Espero se entienda saludos
 



 
wikiuy - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Convertir Formato Time(now) Para Poder Hac... pittusa General 2 Miercoles, 01 Septiembre 2010, 21:08 Ver último mensaje
pittusa
No hay nuevos mensajes Cómo Armar Mi Programa/código Para Poder... santijav General 3 Miercoles, 03 Agosto 2011, 20:03 Ver último mensaje
santijav
No hay nuevos mensajes Cómo Hacer Drag And Drop Entre Columnview? DEATH General 3 Lunes, 13 Febrero 2012, 16:07 Ver último mensaje
DEATH
No hay nuevos mensajes Necesito Asesoramiento, Quiero Hacer Un Ca... gambafeliz Controles/Librerías/Componentes 13 Sabado, 13 Julio 2019, 17:39 Ver último mensaje
gambafeliz
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron