Validators

Validatori Data e Ora

Validatori per date, orari, espressioni cron, range temporali, stagioni e orari lavorativi.

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

FormatoEsempio
ISO2024-01-15
Italiano15/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

StagionePeriodo
spring21 marzo – 20 giugno
summer21 giugno – 22 settembre
autumn/fall23 settembre – 20 dicembre
winter21 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' }