validate-govuk-date
v1.0.3
Published
Validate dates entered using the GOVUK date input
Downloads
292
Maintainers
Readme
Parse GOVUK date
Takes separate day, month, and year values (a la the GOV.UK date input pattern) and checks for errors, returning a JavaScript Date object if none are found.
Overview
The GOV.UK design system is a fantastic resource for building usable, accessible frontends, but it doesn't do a lot as far as validation goes. I created this input for a Driver & Vehicle Standards Agency project a while back and found it sufficient for most use cases.
Usage
Basic usage
Import the module:
import validateDate from "validate-govuk-date";
//or
const validateDate = require("validate-govuk-date");
Give the function a day, month, and year and it will attempt to parse e.g. validateDate(8, 2, 1990)
If no errors are detected, it returns and object with the properties error: false
and a JavaScript Date
object date: Thu Feb 08 1990 00:00:00 GMT+0000 (Greenwich Mean Time)
.
If errors are detected, it returns and object with the properties error: true
and a an array of errors with the properties reason
(to describe the error) and index
(with its index where 0 is the day, 1 is the month, and 2 is the year).
Examples
// With integers:
validateDate(8, 2, 1990) // { error: false, date: Thu Feb 08 1990 00:00:00 GMT+0000 (Greenwich Mean Time) }
// With strings
validateDate('1', '1', '20') // { error: false, date: Wed Jan 01 2020 00:00:00 GMT+0000 (Greenwich Mean Time) }
// Detecting an error and returning its index
validateDate('17', '13', '2020') // { error: true, errors: [ { error: true, reason: "'Date' month must be between 1 and 12", index: 1 } ] }
// Detecting multiple errors and returning their indices
validateDate('', '13', '2020') // { error: true, errors: [ { error: true, reason: "'Date' must include a day", index: 0 }, { error: true, reason: "'Date' month must be between 1 and 12", index: 1 } ] }
// Detecting multiple errors
validateDate('', '13', '2020') // { error: true, errors: [ { error: true, reason: "'Date' must include a day", index: 0 }, { error: true, reason: "'Date' month must be between 1 and 12", index: 1 } ] }
// Pass a field name
validateDate('17', 'Oct', '2022', 'Start date') // { error: true, errors: [ { error: true, reason: "'Start date' month must be a number", index: 1 } ] }