Validatori Data e Ora
Panoramica
I validatori data gestiscono la verifica di date in vari formati, orari, espressioni cron e vincoli temporali complessi come range di date, stagioni e orari lavorativi. Il sistema supporta formati italiani (DD/MM/YYYY), ISO (YYYY-MM-DD) e US (MM/DD/YYYY).
Formati data accettati
| Formato | Esempio |
|---|---|
| ISO | 2024-01-15 |
| Italiano | 15/01/2024, 15-01-2024, 15.01.2024 |
| US (fallback) | 01/15/2024 |
Validatori
date
Sintassi: date
Descrizione: Verifica che il valore sia una data valida. Accetta i formati ISO, italiano e US. Rifiuta date impossibili come il 31 febbraio.
Esempi:
// Valido
ValidationService.validate('2024-01-15', 'date') // formato ISO
ValidationService.validate('15/01/2024', 'date') // formato italiano
ValidationService.validate('15.01.2024', 'date') // formato italiano con punto
// Non valido
ValidationService.validate('32/01/2024', 'date') // giorno impossibile
ValidationService.validate('31/02/2024', 'date') // febbraio non ha 31 giorni
ValidationService.validate('non-una-data', 'date')
// In schema DynamicFormLayouts
{ name: 'datanascita', type: 'date', validation: 'required|date' }
before
Sintassi: before:riferimento
Descrizione: Verifica che la data sia precedente a una data di riferimento. Il riferimento può essere "today" (data corrente) o una data specifica in formato ISO o italiano.
Parametro: today oppure una data specifica
Esempi:
// Prima di oggi
ValidationService.validate('2020-01-01', 'before:today') // valido
ValidationService.validate('2099-01-01', 'before:today') // non valido
// Prima di una data specifica
ValidationService.validate('2024-01-01', 'before:2024-06-01') // valido
ValidationService.validate('2024-08-01', 'before:2024-06-01') // non valido
// In schema DynamicFormLayouts
{ name: 'datanascita', type: 'date', validation: 'required|date|before:today' }
after
Sintassi: after:riferimento
Descrizione: Verifica che la data sia successiva a una data di riferimento. Il riferimento può essere "today" o una data specifica.
Parametro: today oppure una data specifica
Esempi:
// Dopo oggi
ValidationService.validate('2099-01-01', 'after:today') // valido
ValidationService.validate('2020-01-01', 'after:today') // non valido
// Dopo una data specifica
ValidationService.validate('2024-06-01', 'after:2024-01-01') // valido
ValidationService.validate('2023-12-01', 'after:2024-01-01') // non valido
// In schema DynamicFormLayouts
{ name: 'datascadenza', type: 'date', validation: 'required|date|after:today' }
time
Sintassi: time oppure time:formato
Descrizione: Verifica che il valore sia un orario valido. Senza parametro accetta sia il formato 24h che 12h. Con parametro, valida solo il formato specificato.
Parametro: (opzionale) 24h oppure 12h
Esempi:
// Formato libero (accetta entrambi)
ValidationService.validate('14:30', 'time') // valido (24h)
ValidationService.validate('2:30 PM', 'time') // valido (12h)
ValidationService.validate('14:30:00', 'time') // valido (con secondi)
// Formato 24h esplicito
ValidationService.validate('14:30', 'time:24h') // valido
ValidationService.validate('2:30 PM', 'time:24h') // non valido
// Formato 12h esplicito
ValidationService.validate('2:30 PM', 'time:12h') // valido
ValidationService.validate('14:30', 'time:12h') // non valido
// In schema DynamicFormLayouts
{ name: 'orarioappuntamento', type: 'text', validation: 'required|time:24h' }
cronexpression
Sintassi: cronexpression
Descrizione: Verifica che il valore sia un'espressione cron valida a 5 o 6 campi. Supporta la sintassi standard con *, range (1-5), step (*/5) e liste (1,3,5).
Struttura (5 campi): minuti ore giorno-mese mese giorno-settimana
Struttura (6 campi): secondi minuti ore giorno-mese mese giorno-settimana
Esempi:
// Espressioni valide
ValidationService.validate('* * * * *', 'cronexpression') // ogni minuto
ValidationService.validate('0 * * * *', 'cronexpression') // ogni ora
ValidationService.validate('0 9 * * 1-5', 'cronexpression') // lun-ven alle 9
ValidationService.validate('0 9 1 * *', 'cronexpression') // 1° del mese alle 9
ValidationService.validate('*/5 * * * *', 'cronexpression') // ogni 5 minuti
// Non valido
ValidationService.validate('60 * * * *', 'cronexpression') // minuti fuori range
ValidationService.validate('0 25 * * *', 'cronexpression') // ore fuori range
// In schema DynamicFormLayouts
{ name: 'schedulazione', type: 'text', validation: 'required|cronexpression' }
daterange
Sintassi: daterange:inizio,fine
Descrizione: Verifica che la data sia compresa tra due date (incluse). Supporta "today" come valore sia per la data di inizio che per quella di fine.
Parametro: due date separate da virgola nel formato inizio,fine
Esempi:
// Data in un range fisso
ValidationService.validate('2024-06-15', 'daterange:2024-01-01,2024-12-31') // valido
ValidationService.validate('2023-12-31', 'daterange:2024-01-01,2024-12-31') // non valido
// Range con data dinamica
ValidationService.validate('2024-06-15', 'daterange:today,2025-12-31') // valido se oggi <= 2024-06-15
// In schema DynamicFormLayouts
{ name: 'dataevento', type: 'date', validation: 'required|date|daterange:2024-01-01,2024-12-31' }
seasonaldate
Sintassi: seasonaldate:stagione
Descrizione: Verifica che la data cada nella stagione specificata (emisfero nord). Le stagioni seguono le date astronomiche.
Parametro: spring, summer, autumn (o fall), winter
| Stagione | Periodo |
|---|---|
spring | 21 marzo – 20 giugno |
summer | 21 giugno – 22 settembre |
autumn/fall | 23 settembre – 20 dicembre |
winter | 21 dicembre – 20 marzo |
Esempi:
// Verifiche stagionali
ValidationService.validate('2024-07-15', 'seasonaldate:summer') // valido
ValidationService.validate('2024-01-15', 'seasonaldate:winter') // valido
ValidationService.validate('2024-04-01', 'seasonaldate:spring') // valido
ValidationService.validate('2024-07-15', 'seasonaldate:winter') // non valido
// In schema DynamicFormLayouts
{ name: 'datavacanza', type: 'date', validation: 'required|date|seasonaldate:summer' }
businesshours
Sintassi: businesshours oppure businesshours:HH-HH,giorno-giorno
Descrizione: Verifica che una data/ora cada in orario lavorativo. Default: 9:00-18:00, lunedì-venerdì. Il parametro permette di configurare orario e giorni lavorativi.
Parametro: (opzionale) formato HH:MM-HH:MM,gio-gio (es. 9:00-17:30,mon-fri)
Giorni supportati: sun, mon, tue, wed, thu, fri, sat
Esempi:
// Con default (9-18, lun-ven)
ValidationService.validate(new Date(), 'businesshours')
// Orario personalizzato
ValidationService.validate(new Date(), 'businesshours:8-17,mon-fri')
ValidationService.validate(new Date(), 'businesshours:9:00-17:30,mon-sat')
// In schema DynamicFormLayouts
{ name: 'orariocontatto', type: 'datetime', validation: 'required|businesshours:9-18,mon-fri' }
minDate
Sintassi: minDate:intervallo
Descrizione: Verifica che la data non sia precedente a un intervallo dal momento attuale. Accetta solo oggetti Date JavaScript.
Parametro: intervallo temporale con unità: h (ore), d (giorni), w (settimane), m (mesi, 30gg), y (anni, 365gg). Combinabili: 1w2d
Esempi:
// Data non più vecchia di 30 giorni
ValidationService.validate(new Date(), 'minDate:30d')
ValidationService.validate(new Date('2020-01-01'), 'minDate:30d') // non valido
// Non più vecchia di 1 anno
ValidationService.validate(new Date(), 'minDate:1y')
// Combinato
ValidationService.validate(new Date(), 'minDate:1w2d') // non più vecchia di 9 giorni
maxDate
Sintassi: maxDate:intervallo
Descrizione: Verifica che la data non sia successiva a un intervallo dal momento attuale. Accetta solo oggetti Date JavaScript.
Parametro: intervallo temporale (stesso formato di minDate)
Esempi:
// Data non oltre 1 anno nel futuro
ValidationService.validate(new Date('2026-01-01'), 'maxDate:1y')
// Data non oltre 6 mesi nel futuro
ValidationService.validate(new Date(), 'maxDate:6m')
// In schema DynamicFormLayouts
{ name: 'datascadenza', type: 'date', validation: 'required|date|after:today|maxDate:1y' }