Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

javascript regex iso datetime

does anyone have a good regex pattern for matching iso datetimes?

ie: 2010-06-15T00:00:00

like image 584
Scott Klarenbach Avatar asked Jun 29 '10 17:06

Scott Klarenbach


2 Answers

For the strict, full datetime, including milliseconds, per the W3C's take on the spec.:

//-- Complete precision: /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/  //-- No milliseconds: /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)/  //-- No Seconds: /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)/  //-- Putting it all together: /(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/ 

.
Additional variations allowed by the actual ISO 8601:2004(E) doc:

/******************************************** **    No time-zone varients: */ //-- Complete precision: /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+/  //-- No milliseconds: /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d/  //-- No Seconds: /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d/  //-- Putting it all together: /(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+)|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d)|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d)/ 

WARNING: This all gets messy fast, and it still allows certain nonsense such as a 14th month. Additionally, ISO 8601:2004(E) allows a several other variants.

.
"2010-06-15T00:00:00" isn't legal, because it doesn't have the time-zone designation.

like image 112
Brock Adams Avatar answered Sep 20 '22 06:09

Brock Adams


For matching just ISO date, like 2017-09-22, you can use this regexp:

^\d{4}-([0]\d|1[0-2])-([0-2]\d|3[01])$ 

It will match any numeric year, any month specified by two digits in range 00-12 and any date specified by two digits in range 00-31

like image 37
Sergey P. aka azure Avatar answered Sep 19 '22 06:09

Sergey P. aka azure