Discussione:
Giornio settimana "oggi" e "oggi un anno fa"
(troppo vecchio per rispondere)
Daniele
2019-04-02 15:32:14 UTC
Permalink
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
delo
2019-04-03 06:44:27 UTC
Permalink
Secondo me devi definire meglio "un anno fa" (tipo: lo stesso giorno della settimana
piu' vicino alla distanza di un anno)
il calendario e i suoi giorni sono una convenzione, purtroppo l'anno dura 365 e 1/4
dai una occhiata al tempo unix e alla congruenza di Zeller (anche se DayOfTheWeek
penso la usi).

delo
Post by Daniele
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
Daniele
2019-04-03 08:42:02 UTC
Permalink
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$***@gioia.aioe.org...

Secondo me devi definire meglio "un anno fa" (tipo: lo stesso giorno della
settimana
piu' vicino alla distanza di un anno)
il calendario e i suoi giorni sono una convenzione, purtroppo l'anno dura
365 e 1/4
dai una occhiata al tempo unix e alla congruenza di Zeller (anche se
DayOfTheWeek
penso la usi).

delo
Post by Daniele
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
Antò LuZombi
2019-04-03 16:39:11 UTC
Permalink
Post by Daniele
Ciao a tutti,
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 ?
NumeroSettimana = ((Data-365) div 7) + 1 // In che settimana del mese
sono ?
Post by Daniele
GiornoSettimana = DayOfTheWeek((Data-365)) // giorno della settimana
Ma e' fallace ...
Per esempio se l'anno e' bisestile ?
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.
brunello
2019-04-04 06:41:56 UTC
Permalink
Post by Daniele
Post by Daniele
NumeroSettimana = ((Data-365) div 7) + 1 // In che settimana del mese
sono ?
la funzione WeekOfTheYear(Data) ed è pure più semplice
Daniele
2019-04-06 09:57:53 UTC
Permalink
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

Loading...