Autore Topic: [Risolto] Datediff  (Letto 971 volte)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
[Risolto] Datediff
« il: 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)
« Ultima modifica: 23 Gennaio 2019, 17:34:52 da dex »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.239
  • Tonno verde
    • Mostra profilo
Re:Datediff
« Risposta #1 il: 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)
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Datediff
« Risposta #2 il: 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 .
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.239
  • Tonno verde
    • Mostra profilo
Re:Datediff
« Risposta #3 il: 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.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline cogier

  • Gambero
  • **
  • Post: 57
    • Mostra profilo
Re:Datediff
« Risposta #4 il: 23 Gennaio 2019, 17:12:14 »
Prova questo codice

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:Datediff
« Risposta #5 il: 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
« Ultima modifica: 23 Gennaio 2019, 17:42:29 da dex »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.239
  • Tonno verde
    • Mostra profilo
Re:Datediff
« Risposta #6 il: 23 Gennaio 2019, 17:49:45 »

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


+1  ???
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:[Risolto] Datediff
« Risposta #7 il: 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

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.239
  • Tonno verde
    • Mostra profilo
Re:[Risolto] Datediff
« Risposta #8 il: 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:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:[Risolto] Datediff
« Risposta #9 il: 23 Gennaio 2019, 19:21:30 »
lo so
in fase di lettura non uso datediff ma un semplice if

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Datediff
« Risposta #10 il: 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 !





...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:
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.725
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:[Risolto] Datediff
« Risposta #11 il: 23 Gennaio 2019, 20:33:57 »
Citazione
Sante parole!  :angel:
sanmidi
Ora pro nobis!
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[Risolto] Datediff
« Risposta #12 il: 23 Gennaio 2019, 20:40:56 »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »