Salve a tutti,
premesso che non sono né un programmatore né un matematico, sto cercando di realizzare uno script per un pezzetto di form, che appare più o meno così:
![]()
L'utente tramite 4 selectlist inserisce nel form 2 orari (chiamiamoli H1 e H2) nel formato HH:MM.
L'obbiettivo e' che il form restituisca la differenza tra i due orari, in forma di frase, secondo questi esempi:
12:00 - 13:30
"L'evento H2 è avvenuto 1 ora e 30 minuti in ritardo rispetto all'evento H1"
15:00 - 12:30
"L'evento H2 è avvenuto 2 ore e 30 minuti in anticipo rispetto all'evento H1"
Se le ore o i minuti di ritardo (o di anticipo) equivalgono a zero, l'output dovrebbe escludere la parte inutile della frase:
11:00 - 10:20
"L'evento H2 è avvenuto 40 minuti in anticipo rispetto all'evento H1"
[non "ZERO ORE E 40 minuti"]
11:00 - 16:00
"L'evento H2 è avvenuto 5 ore in ritardo rispetto all'evento H1"
[non "5 ore E ZERO MINUTI"]
In caso di uguaglianza l'output potrebbe essere: "I due eventi sono avvenuti contemporaneamente, alle XX.XX"
L'ideale sarebbe che l'output apparisse in tempo reale tramite JS, ma anche che ci fosse un bel php che "prendesse in mano la situazione" dopo il submit in caso JS disabilitati![]()
Posto qui sotto, quello che finora sono riuscito a spremere: sicuramente ci saranno vie più rapide e semplificazioni, ma magari torna utile a qualcuno.
Dal canto mio, per ora non riesco a tradurre queste espressioni né in php né in js: posto il thread perché magari sto complicando tutto, e forse qualcuno può salvarmi parecchie ore in due minuti:
_____________________________________
H1: ORA UNO: es. 12:25 = A1:A2
H2: ORA DUE: es. 23:30 = B1:B2
DH=(B1-A1) [DIFFERENZA TRA I DUE SELECT DELLE ORE]
DM=(B2-A2) [DIFFERENZA TRA I DUE SELECT DEI MINUTI]
RITH = ORE DI RITARDO
RITM = MINUTI DI RITARDO
ANTH = ORE DI ANTICIPO
ANTM = MINUTI DI ANTICIPO
SIGNMIN = Variabile che decide se dichiarare un ritardo di minuti (non ha senso dire "anticipo di due ore E ZERO MINUTI"). Se SIGNMIN = 0, la frase viene troncata dopo "ore", altrimenti prosegue con "e XX minuti".
SIGNHOUR = Variabile che decide se dichiarare un ritardo di ore (non ha senso dire "anticipo di ZERO ORE ore 30 minuti"). Se SIGNHOUR = 0, la frase "ritardo di ZERO ORE E 30 minuti" viene troncata in tutte le sue parole in maiuscolo, altrimenti viene tutta dichiarata.
CODICE (chiamiamolo così!):
IF ((DH=0) AND (DM=0)) THEN "EVENTI AVVENUTI CONTEMPORANEAMENTE"
IF ((DH!=0) AND (DM=0))
IF (DH>0) THEN ((RITH=DH) AND (SIGNMIN=0))
IF (DH<0) THEN ((ANTH=DH-DH-DH) AND (SIGNMIN=0))
IF ((DH>0) AND (DM!=0))
IF (DM>0) THEN ((RITH=DH) AND (RITM=DM))
IF (DM<0) THEN ((RITH=DH-1) AND (RITM=(DH*60+DM)-(60*(DH-1)))
IF ((DH<0) AND (DM!=0))
IF (DM>0) THEN ((ANTH=(DH*(-1)-1)) AND ((ANTM=(((DH*60+DM)-(60*(DH+1)))-((DH*60+DM)-(60*(DH+1)))-((DH*60+DM)-(60*(DH+1))))
IF (DM<0) THEN (ANTH=(DH-DH-DH)) AND (ANTM=(DM-DM-DM)
IF ((DH=0) AND (DM!=0))
IF (DM>0) THEN (SIGNHOUR=0) AND (RITM=DM)
IF (DM<0) THEN (SIGNHOUR=0) AND (ANTM=DM-DM-DM)
ELSE
?
SVUOTA TUTTE LE VARIABILI
_______________________________________
O dovrei provare altre strade? (non ditemi il ping-pong)![]()
![]()
Ciao e grazie,