Calcolare il numero di giorni compresi fra due date

Da Gambas-it.org - Wikipedia.

Per ottenere il calcolo del numero di giorni compresi fra due date, anche appartenenti ad anni diversi, è possibile adottare alcune soluzioni.

Uso delle sole risorse di Gambas

Potremo adottare le sole risorse di Gambas, come ad esempio la funzione "DateDiff()", impostando in particolare il secondo parametro attuale con la costante gb.Day nativa di Gambas: [nota 1]

Public Sub Main()
 
 Print DateDiff(Date(1964, 1, 4, 0, 0, 0, 0), Date(1969, 8, 21, 0, 0, 0, 0), gb.Day)
 
End


Potremo anche utilizzare il Controllo grafico DateBox e in particolare la sua Proprietà ".Value", magari impostando manualmente la data sul DateBox: [nota 2]

Public Sub Button1_Click()
 
 Print DateBox2.Value - DateBox1.Value
 
End


Uso di alcune funzioni esterne del API di Glib-2.0

Si potrà anche fare uso di alcune funzioni esterne del API di Glib-2.0.

E' necessario in tal caso avere installata nel sistema e richiamare in Gambas la libreria condivisa: "libglib-2.0.so.0.8000.2 ".

Mostriamo un esempio:

Library "libglib-2.0:0.8000.2"

Public Struct GDate
  julian_days As Integer
  julian As Integer
  dmy As Integer
  day As Integer
  month As Integer
  year As Integer
End Struct

' GDate * g_date_new_dmy (GDateDay day, GDateMonth month, GDateYear year)
' Allocates a GDate, initializes it to a sane state, and sets the value of the date.
Private Extern g_date_new_dmy(gday As Byte, gmonth As Integer, gyear As Short) As GDate

' gint g_date_days_between (const GDate *date1, const GDate *date2)
' Computes the number of days between two dates.
Private Extern g_date_days_between(date1 As GDate, date2 As GDate) As Integer

' void g_date_free (GDate *date)
' Frees a GDate returned from g_date_new().
Private Extern g_date_free(g_date As GDate)


Public Sub Main()
 
 Dim gd1, gd2 As GDate
 Dim giorni As Integer

 gd1 = g_date_new_dmy(1, 5, 2004)
 gd2 = g_date_new_dmy(3, 5, 2004)
  
 giorni = g_date_days_between(gd1, gd2)
 
 Print giorni
 
' Libera la memoria precedentemente occupata da libglib-2.0:
 g_date_free(gd2)
 g_date_free(gd1)
 
End


Note

[1] Questa soluzione è stata suggerita dal membro tornu

[2] Questa soluzione è stata suggerita dal membro Gianluigi.