Ora HTML: formato 24 ore, min, max, step e secondi
HTML input type="time" accetta un'ora del giorno. Anche se l'interfaccia mostra AM/PM, il valore è generalmente una stringa in formato 24 ore come 09:30, o 13:10:20 quando sono inclusi i secondi. min/max impostano i limiti, e step imposta gli intervalli in secondi.
Distingui il formato di visualizzazione dal valore
L'interfaccia di input varia in base al sistema operativo, al browser e alla lingua dell'utente. Non aspettarti che ogni menu a tendina o selettore abbia lo stesso aspetto. Inserisci una stringa valida come 13:30 nel valore iniziale, non un testo di visualizzazione localizzato come 1:30 PM. Imposta il valore iniziale con l'attributo value e leggi la selezione corrente dell'utente attraverso input.value.
Un valore temporale non ha data né fuso orario. Non può dirti se le 9:00 significano Seoul o un'altra località. Per una prenotazione che identifica un istante reale, raccogli anche la data e il fuso orario di riferimento e interpretali in modo coerente sul server. Per una durata come 90 minuti, scegli un formato appropriato come un conteggio numerico di minuti invece di riutilizzare un controllo dell'orario.
Imposta limiti e intervalli
| Attributo | Esempio | Significato |
|---|---|---|
value |
09:30 |
Ora iniziale; deve rientrare nell'intervallo e nel passo nonché nel formato. |
min, max |
09:00, 18:00 |
Limiti inclusivi per gli orari consentiti. |
step |
900 |
900 secondi sono 15 minuti. Il valore predefinito 60 è un minuto; 1 è un secondo. |
required |
Attributo booleano | Blocca l'invio ordinario quando è vuoto. |
name |
meeting |
Nome del campo inviato; un id da solo non crea un nome di dati. |
La base è un min valido, altrimenti l’attributo HTML value valido, oppure 00:00:00 se entrambi mancano. Per min="09:00" step="900", 09:00, 09:15 e 09:30 sono validi, ma 09:10 non è compatibile. Questo non determina slot di prenotazione disponibili o giorni chiusi; implementare le regole del servizio separatamente.
Esempio completo: intervalli di 15 minuti e secondi
Salva questo codice come time.html e aprilo in un browser. Non è necessario alcun server per verificare la validazione e i valori inviati. Il secondo input utilizza esplicitamente step="1" per consentire i secondi.
<!doctype html>
<html lang="it">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Intervalli orari e secondi</title>
<style>
body { margin: 24px; font-family: sans-serif; }
label { display: block; margin: 16px 0 6px; }
input { max-width: 100%; box-sizing: border-box; }
pre { white-space: pre-wrap; overflow-wrap: anywhere; }
</style>
</head>
<body>
<h1>Scegli un orario</h1>
<form id="demo">
<label for="meeting">Riunione (09:00–18:00, passi di 15 minuti)</label>
<input id="meeting" name="meeting" type="time"
min="09:00" max="18:00" step="900" value="09:30" required>
<label for="checkpoint">Controllo (13:00–15:00, passi di un secondo)</label>
<input id="checkpoint" name="checkpoint" type="time"
min="13:00:00" max="15:00:00" step="1" value="13:10:20" required>
<p><button type="submit">Mostra valori inviati</button>
<button type="reset">Ripristina</button></p>
</form>
<pre id="result" aria-live="polite"></pre>
<script>
const form = document.querySelector('#demo');
const result = document.querySelector('#result');
form.addEventListener('submit', (event) => {
event.preventDefault();
result.textContent = JSON.stringify([...new FormData(form).entries()], null, 2);
});
form.addEventListener('input', () => { result.textContent = ''; });
form.addEventListener('reset', () => { result.textContent = ''; });
</script>
</body>
</html>
- Invia inizialmente:
meetingè09:30echeckpointè13:10:20. L'output è in formato 24 ore anche se l'interfaccia utente utilizza AM/PM. - Imposta l'orario della riunione alle 08:45 per far fallire la validazione dell'intervallo. Le 09:10 rientrano nell'intervallo ma non rispettano l'incremento di 15 minuti. Le 09:45 vengono inviate con successo.
- Cancella completamente l'orario della riunione e invia per verificare la validazione obbligatoria. Ripristina un orario valido, poi modifica i secondi nel secondo input per confrontare l'output a livello di secondi.
- Modifica solo il checkpoint da
step="1"astep="60"e riapri il file. L'orario iniziale 13:10:20 è di 20 secondi fuori dai passi di un minuto da 13:00:00 ed è invalido. Ripristina successivamente il passo a 1. - Il ripristino reimposta la riunione alle 09:30 e il checkpoint alle 13:10:20.
Intervalli che attraversano la mezzanotte e validazione del server
Gli input di orario possono esprimere un intervallo che attraversa la mezzanotte. Ad esempio, min="22:00" max="02:00" significa dalle 22:00 fino a mezzanotte e alle 2:00. Non si tratta di un intervallo contenente date effettive, quindi non seleziona automaticamente la data del giorno successivo. Verifica il supporto per questa convalida nei browser di destinazione e implementa le stesse regole sul server.
Il selettore e i messaggi di convalida del browser non sostituiscono la convalida del server. Il server deve verificare il formato, l'intervallo e il passo della stringa ricevuta e combinarlo con la data richiesta, il fuso orario e la disponibilità delle prenotazioni. %3A in un URL GET è due punti codificati; l'analisi normale del valore del modulo restituisce una stringa come 09:30.
Se serve anche una data, consulta i valori e i limiti di date. Per i formati orari e gli attributi, consulta il riferimento MDN per time.




