Gambas-it

Gambas3 => Programmazione => Topic aperto da: dex - 23 Gennaio 2019, 00:54:48

Titolo: [Risolto] Datediff
Inserito da: dex - 23 Gennaio 2019, 00:54:48
Ciao raga
devo calcolare il giorno di un anno dal 1 gennaio esempio:
Codice: [Seleziona]
10/01/19 = 10
03/02/19 = 34
 

sto usando Datediff ma mi da problemi con il risultato
Codice: [Seleziona]
01/01/19 = 0
02/01/19 = 0
03/01/19 = 1

il codice che uso è:
Codice: [Seleziona]
Anno = Year(ValueBox68.value)
Data1 = "01/01/" & Anno

  Label79.caption = DateDiff(Data1, ValueBox68.value, gb.day)
Titolo: Re:Datediff
Inserito da: Gianluigi - 23 Gennaio 2019, 09:40:09
Immagino che sia Data1 che Anno siano di tipo string, se così è dovresti cambiare il codice così:
Codice: [Seleziona]
Label79.Caption = DateDiff(Date(Data1), ValueBox68.value, gb.day)
oppure
Codice: [Seleziona]
Label79.Caption = DateDiff(Val(Data1), ValueBox68.value, gb.day)
Titolo: Re:Datediff
Inserito da: vuott - 23 Gennaio 2019, 13:16:59
Immagino che sia Data1 che Anno siano di tipo string
A rigore, la variabile "Anno" dovrebbe essere di tipo Intero, giacché la Funzione Year( ) restituisce appunto un dato di tipo Intero.


Codice: [Seleziona]
Label79.Caption = DateDiff(Date(Data1), ValueBox68.value, gb.day)
oppure
Codice: [Seleziona]
Label79.Caption = DateDiff(Val(Data1), ValueBox68.value, gb.day)
Va, in vero, rilevato che il primo e il secondo parametro formale della funzione DateDiff( ) ricevono il tipo Date .
Titolo: Re:Datediff
Inserito da: Gianluigi - 23 Gennaio 2019, 16:50:10
Immagino che sia Data1 che Anno siano di tipo string
A rigore, la variabile "Anno" dovrebbe essere di tipo Intero, giacché la Funzione Year( ) restituisce appunto un dato di tipo Intero.

Si hai ragione, non ho fatto caso al codice precedente il Diff perché subito colpito dall'evidente errore.
Comunque sia, Date1 dovrebbe essere (è) una stringa a cui l'intero di Anno viene passato in coercizione e pertanto il codice da me suggerito dovrebbe funzionare.

Prendo spunto dalla variazione di tipo implicito detta appunto coercizione nel codice di dex per ribadire un'ulteriore volta che dovremmo sempre variare i tipi esplicitamente in questo caso:
Codice: [Seleziona]
Data1 = "01/01" &/ Cstr(Anno)
Lo so che Gambas è sufficientemente intelligente per farlo implicitamente, ma questo dimostra che se noi fossimo abituati a fare sempre la variazione del tipo difficilmente incorreremmo nell'errore di passare una stringa al posto di una data.
Tuttalpiù in questo caso saremmo potuti incorrere nell'errore di fare un CDate, ma questo è un altro discorso.
Titolo: Re:Datediff
Inserito da: cogier - 23 Gennaio 2019, 17:12:14
Prova questo codice
Titolo: Re:Datediff
Inserito da: dex - 23 Gennaio 2019, 17:33:39
Ciao raga
grazie a voi ho risolto
Codice: [Seleziona]
Dim Data1 As Date
Dim Anno As Integer

Anno = Year(ValueBox68.value)
Data1 = Date(anno, 1, 1)

  Label79.caption = DateDiff(Data1, ValueBox68.value, gb.day) + 1

@cogier
simpatico il programmino che hai fatto
Titolo: Re:Datediff
Inserito da: Gianluigi - 23 Gennaio 2019, 17:49:45

Codice: [Seleziona]
   Label79.caption = DateDiff(Data1, ValueBox68.value, gb.day) + 1


+1  ???
Titolo: Re:[Risolto] Datediff
Inserito da: dex - 23 Gennaio 2019, 18:18:09
è una cosa che serve a me
datediff calcola la differenza e quindi porta un giorno in meno, a me serve per salvarlo in un database e quando vado a leggere con la query il numero 1 mi deve dare 1 gennaio ecc..
potevo anche usarlo senza + 1, se la query mi dava 0 sapevo che era il 1 gennaio, ma cosi è più intuitivo, numero 6 befana, numero 31 fine gennaio, 365 vigilia capodanno ecc..

 ;D ora da attendo osservatore come sei, ti sarai chiesto e se l'anno è bisestile?
in fase di lettura con un if se bisestile dopo il n 58 aggiungo un altro +1
Titolo: Re:[Risolto] Datediff
Inserito da: Gianluigi - 23 Gennaio 2019, 18:53:47
è una cosa che serve a me
datediff calcola la differenza e quindi porta un giorno in meno, a me serve per salvarlo in un database e quando vado a leggere con la query il numero 1 mi deve dare 1 gennaio ecc..
potevo anche usarlo senza + 1, se la query mi dava 0 sapevo che era il 1 gennaio, ma cosi è più intuitivo, numero 6 befana, numero 31 fine gennaio, 365 vigilia capodanno ecc..

 ;D ora da attendo osservatore come sei, ti sarai chiesto e se l'anno è bisestile?
in fase di lettura con un if se bisestile dopo il n 58 aggiungo un altro +1

Attento che DateDiff tiene conto dell'anno bisestile tu non devi aggiungere proprio nulla.  :ciao:
Titolo: Re:[Risolto] Datediff
Inserito da: dex - 23 Gennaio 2019, 19:21:30
lo so
in fase di lettura non uso datediff ma un semplice if
Titolo: Re:Datediff
Inserito da: vuott - 23 Gennaio 2019, 20:06:58
Prendo spunto dalla variazione di tipo implicito detta appunto coercizione nel codice di dex per ribadire un'ulteriore volta che dovremmo sempre variare i tipi esplicitamente in questo caso:
Sante parole !    :angel:


Lo so che Gambas è sufficientemente intelligente per farlo implicitamente
...questo caso potremmo definirlo "eccesso di pappa pronta".... che fa taaanto male, tanto !

(http://images.45cat.com/no-artist-listed-mucino-gattino-svogliato-casa-editrice-capitol-s.jpg)



...ma questo dimostra che se noi fossimo abituati a fare sempre la variazione del tipo difficilmente incorreremmo nell'errore di passare una stringa al posto di una data.
Sante parole !    :angel:
Titolo: Re:[Risolto] Datediff
Inserito da: kicco - 23 Gennaio 2019, 20:33:57
Citazione
Sante parole!  :angel:
sanmidi
Ora pro nobis!
Titolo: Re:[Risolto] Datediff
Inserito da: vuott - 23 Gennaio 2019, 20:40:56
Ora pro nobis!

...semper !