Newsgroup: it.comp.lang.delphi
Titolo: Giornio settimana "oggi" e "oggi un anno fa"

Ciao a tutti,
  piccola introduzione ...
Sto cercando di migliorare un "monitor" con una funzione di comparazione 
"oggi" con "oggi un anno fa".
Sembra una banalita' ma mi sono trovato a gestire diverse situazioni.
Per esempio oggi (02/04/2019) e' il primo martedi del mese di aprile 2019, 
il primo martedi del mese di aprile 2018 e' il 03/04/2018.
Primo problema e' come intercettare il martedi'.
Ho pensato di usare questa logica
NumeroSettimana = (Data div 7) + 1 // In che settimana del mese sono ?
GiornoSettimana = DayOfTheWeek(Data) // giorno della settimana
Questo per l'anno in corso ...
Ma per quello precedente ?
 
Ma e' fallace ...
Per esempio se l'anno e' bisestile ?
Se cambiano i numeri delle settimane ?
 
Qualche idea su come rendere stabile e affidabile un confronto del genere ?
 
Grazie
 
Ciao
Daniele
 
 
 
 

 ha scritto nel messaggio news:q7vv9t$8cn$1...@gioia.aioe.org...


Ciao Delo,
    il confronto va fatto non sulla data del calendario (tipo 3 Aprile 2019 
e 3 Aprile 2018) ma sul numero del giorno della settimana.
Cerco di spiegarmi meglio, oggi e' il 3 Aprile 2019 ed e' il primo 
mercoledi' del mese.
Devo raffrontare il primo mercoledi' del mese di Aprile 2019 con il primo 
mercoledi' del mese di Aprile 2018, ovvero con il 4 Aprile 2018.
Per fare questo, analizzando la data di oggi, con (Data div 7) + 1 ottengo 
il numero della settimana (1) e con DayOfThe Week(Data) ottengo 3.
Ora devo trovare quella data di Aprile 2018 che applicando (Data Div 7) +1 = 
1 e DayOfThe Week(Data)=3.
Con un ciclo che va dal primo giorno del mese all'ultimo sono in grado di 
avere quei dati, purtroppo ci sono delle criticita' che non so come gestire.
Per esempio il 29 Febbraio 2016, essendo bisestile, non ha nessuna 
corrispondenza con il 2017.
Questi casi sono rari .... ma devono essere gestiti ...
 
Hai qualche suggerimento??
 
Grazie
 
Ciao
Daniele
 
"delo"  ha scritto nel messaggio news:q81kum$1rhn$1...@gioia.aioe.org...


 Se cambiano i numeri delle settimane ?
 
if questanno or annoscorso is bisestile then 366 else 365
-- 
Oggi c'e' una grande battaglia di idee,
ma alla fine non ci saranno ne vinti,
ne vincitori, ne idee! S. Benni da Elianto.

 sono ?
la funzione WeekOfTheYear(Data) ed è pure più semplice
 

Ciao a tutti,
  condivido la soluzione che ho applicato (nella remota eventualita' che 
possa interessare a qualcuno).
Il raffronto tra due date avviene selezionando una prima data ed il 
confronto e' svolto sullo stesso giorno dell'anno precedente.
Con lo "stesso giorno" si intende , per esempio, lunedi' con lunedi', 
martedi' con martedi' ecc...
Il giorno viene estratto con DayOfTheWeek(Data) e la settimana e' estratta 
con WeekOfTheMonth(Date).
Ora si hanno i riferimenti della data scelta, ora ci si deve posizionare 
sulla stessa settimana e sullo stesso giorno ... ma di un anno fa.
Con un ciclo for I:=1 to DaysInAMonth(YearOf(Data)-1,MonthOf(Data)) ci si 
posiziona sulla stessa settimana e sullo stesso giorno.
Le criticita' vengono tenute in considerazione ma, all'atto pratico, se il 
confronto, per qualsivoglia motivo, non puo' essere fatto, resetto i campi.
Per esempio un confronto che NON puo' essere fatto e' sulla data 01/04/2019.
Infatti 01/04/2019 = settimana 1, giorno 1 (lunedi).
Con questi riferimenti, un anno fa, settimana 1, giorno 1 nel 2018 = 
02/04/2018 (lunedi), me essendo San Angelo (per noi festivo) non ha dati da 
comparare, reset dei campi.
 
Grazie a tutti le risposte.
 
Ciao
 
Daniele