Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    11

    Script x indicare differenza tra due orari inseriti con select in un form (JS e PHP)

    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,
    Panamon Rn+

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    112
    Un paio di spunti:

    Se vuoi farlo in js, ti consiglio di guardare la classe Date di javascript (approfondimenti qui). Fai una funzione che viene lanciata sull'evento onchanghe delle varie select e che crea due oggetti data calcolandone poi la differenza.

    SE invece vuoi procedere con php, una volta recuperati i dati via get, crei di nuovo due date con la funzione mktime e calcoli poi la differenza in secondi e in base al risultato crea una stringa da restituire (per esempio 1 ora e mezza).

    Gabriele

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.