Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Confronto date inizio e date fine

10 views
Skip to first unread message

Gianfranco

unread,
Nov 2, 2020, 5:21:26 AM11/2/20
to
Ciao a tutti,

e scusatemi per il disturbo e la richiesta da grande inesperto. Spero
possiate aiutarmi.

Sto realizzando, tra l'altro, una griglia che mostri graficamente
le richieste di ferie presentate sul lavoro: in un database ho per
ogni dipendente le date delle richieste, inizio e fine; l'utente puo'
selezionare il mese che gli interessa e visualizzare la griglia di tutti
i colleghi che hanno richiesto ferie in quel periodo.

Per evitare di mostare righe vuote (colleghi che hanno presentato
richiesta di ferie ma non in quel mese), ho piazzato a braccio questa
condizione:

/* Ci sono richieste nel periodo? $iMese e $iAnno via _GET */

if ($dDataIn >= mktime(0,0,0,$iMese,1,$iAnno)
&& ($dDataOut <=mktime(0,0,0,$iMese,$iGiorniMese,$iAnno)))

Che mostra solo le richieste di ferie che cadono completamente nel
mese in questione mentre non "passano" quelle in cui la richiesta e' a
cavallo tra due mesi o tra un anno e l'altro.

Se metto un || al posto di && funziona, pero' vedo una serie di
griglie vuote e non mi piace (anche se potrei fregarmene).

Prima di impelagarmi in una serie di case che mi sembra una soluzione
molto brutta, c'e' qualcosa di piu' semplice?

Se puo' servire per capire meglio di che si tratta, posto il link al
lavoro che sto facendo...

Grazie.

Un saluto,


--
Gianfranco Bertozzi

Leonardo Serni

unread,
Nov 2, 2020, 8:54:54 AM11/2/20
to
On Mon, 2 Nov 2020 10:21:23 +0000 (UTC), Gianfranco <gber...@gmail.com>
wrote:

>/* Ci sono richieste nel periodo? $iMese e $iAnno via _GET */
>
>if ($dDataIn >= mktime(0,0,0,$iMese,1,$iAnno)
> && ($dDataOut <=mktime(0,0,0,$iMese,$iGiorniMese,$iAnno)))

> Che mostra solo le richieste di ferie che cadono completamente nel
>mese in questione mentre non "passano" quelle in cui la richiesta e' a
>cavallo tra due mesi o tra un anno e l'altro.

Vedila in quest'altro modo: tu vuoi ESCLUDERE le richieste che finiscono PRIMA
del periodo in esame, e quelle che iniziano DOPO. Tutte le altre no.

Quindi:

if (!(($dDataOut < mktime(0,0,0,$iMese,1,$iAnno))
|| ($dDataIn > mktime(0,0,0,$iMese,$iGiorniMese,$iAnno))
)) {

}

Dato che NOT (A OR B) equivale a (NOT A AND NOT B), puoi riscrivere

if ((($dDataOut >= mktime(0,0,0,$iMese,1,$iAnno))
&& ($dDataIn <= mktime(0,0,0,$iMese,$iGiorniMese,$iAnno))
)) {

che sembra un po' "anti-intuitiva" perché ti confronta la fine di una cosa con
l'inizio di un'altra.

Metti un po' a posto le uguaglianze per la regolazione di fino.

Leonardo
--

"You all presumably know why" :-) :-(

Gianfranco

unread,
Nov 2, 2020, 11:38:16 AM11/2/20
to
On Mon, 02 Nov 2020 14:54:50 +0100, Leonardo Serni wrote:

Ciao,



> Vedila in quest'altro modo: tu vuoi ESCLUDERE le richieste che
> finiscono PRIMA del periodo in esame, e quelle che iniziano DOPO.
> Tutte le altre no.

Detta cosi' diventa facile, anche da comprendere. Non c'ero proprio
arrivato a rovesciare la condizione, e invece e' una soluzione semplice
ed elegante.

Devo studiare di piu'. ;-)


> Dato che NOT (A OR B) equivale a (NOT A AND NOT B), puoi riscrivere
>
> if ((($dDataOut >= mktime(0,0,0,$iMese,1,$iAnno))
> && ($dDataIn <= mktime(0,0,0,$iMese,$iGiorniMese,$iAnno))
> )) {

Ho preferito questa che mi piace di piu' e sembra funzionare
perfettamente. Faccio due altre prove ma credo che ci siamo.

Ti ringrazio veramente tanto, sei sempre gentilissimo. Il lavoro ora
e' quasi pronto. Ti direi che vorrei contraccambiare il favore ma, visto
il lavoro che faccio, non ti conviene. ;-)

Un saluto e grazie ancora,

--
Gianfranco Bertozzi

Gianfranco

unread,
Nov 3, 2020, 4:41:51 AM11/3/20
to
On Mon, 2 Nov 2020 16:38:10 +0000 (UTC), Gianfranco wrote:

Ciao,


> e' quasi pronto. Ti direi che vorrei contraccambiare il favore ma, visto
> il lavoro che faccio, non ti conviene. ;-)

Resta inteso che, se mai un giorno ci dovessimo incontrare, ti offro
da bere. :)
0 new messages