IT
QlikView gestisce le date come il numero (decimale) di giorni passati dal 30 Dicembre 1899. Non ho mai capito perché, è una scelta abbastanza strana. Speravo che fosse un tributo a qualche evento interessante del 30 dicembre 1899, ma l'unico fatto apparentemente rilevante è la morte di un politico comunista svedese... Che delusione.
Tornando a noi, ciò significa che:
- il giorno 2 è il primo Gennaio 1900 a mezzanotte
- il giorno 2.5 è il primo Gennaio 1900 a mezzogiorno
Ne consegue un gran numero di proprietà comode per elaborare date, ma giocando con una data come se fosse un numero, la sua rappresentazione diventa numerica. Per tornare alla rappresentazione di data basta mettere attorno date() (o timestamp() se vogliamo mostrare anche l'ora; oppure impostare il formato nell'oggetto che mostra il campo con la data in questione).
Qualche esempio:
floor(now())equivale atoday(), cioè la mezzanotte di oggi (solo molto più pesante)ceil(now())è la mezzanotte di domaninow()+7è fra una settimana a quest'oradata_pagamento - data_scadenza_fatturaè il numero di giorni di ritardo di pagamentotoday() + 365*4non è oggi fra 4 anni causa anni bisestili, per quello è più furbo usareaddyears(today(), 4)today() + 30probabilmente non è lo stesso giorno del mese prossimo, per quello è più furbo usareaddmonths(today(), 1)37145 + 0.36575è circa uguale amakedate(2001, 9, 11) + maketime(8, 46, 40)che equivale a'11/09/2001 8.46.40'39739è il mio prossimo compleanno
Una piccola nota sulla funzione date(espressione [, formato]): serve per formattare il primo argomento secondo la stringa di formato, se non viene specificata viene usato il valore della variabile DateFormat (impostato ad inizio script).
Attenzione però: modifica solo la rappresentazione, ma non tocca il dato. Infatti date(makedate(2008)+maketime(12), 'DD/MM/YYYY') ci mostrerà '01/01/2008' ma conterrà anche l'ora (mezzogiorno). Per capire come mai la rappresentazione sia diversa dal valore numerico sottostante, vedere il mio vecchio post sulla rappresentazione testuale, numerica, duale. Volendo togliere ora, minuti, secondi è sufficiente approssimare per difetto con floor(), come dico più sopra.
EN
QlikView stores dates as the number of days since 30 december 1899. Thus:
2is 1 jan 1900, at midnight2.5is 1 jan 1900, at middayfloor(now())is the same astoday()(just slower)ceil(now())means tomorrownow()+7means next week at this timepayment_date - invoice_due_dateis the number of payment delay daystoday() + 365*4is not today in 4 years, which in fact isaddyears(today(), 4)today() + 30is probably not this day next month, which isaddmonths(today(), 1)37145 + 0.36575is almostmakedate(2001, 9, 11) + maketime(8, 46, 40)which is'11/09/2001 8.46.40'39739is my next birthday
Just a note: date(expression [, format]) doesn't actually modify the date, it justs shows it with a given format. Thus date(now(), 'YYYY-MM-DD') = now() yields true, even if it's not midnight.
If it seems odd to you, see my post about dual().
"39739 è il mio prossimo compleanno"
Tra due giorni sono in ferie e non posso farti gli auguri!
Auguri! :)
Enrico
Grazie Enrico!