Sometimes, we have a date string that we want to convert to a date object in JavaScript.
In this article, we’ll look at how to convert a date string to a date object in JavaScript.
Extract the Parts of the Date String and Pass Them to the Date Constructor
One way to create a JavaScript date object from a date string is to extract the date parts from the date string and pass them all into the Date constructor.
For instance, we can write:
const [year, month, day] = '2020-04-03'.split('-');
const date = new Date(year, month - 1, day);
console.log(date.toDateString());
We call split on the date string with '-' to split the date string by the dash.
Then we destructure the year , month , and day from the split string array.
Next, we pass all of that into the Date constructor.
We’ve to subtract 1 from month since the month’s value that the Date constructor accepts is from 0 to 11, where 0 is for January and 11 is for December.
Then we get ‘Fri Apr 03 2020’ from the toDateString method.
We can also massage a date into an ISO date string and pass that into the Date constructor.
For instance, we can write:
const st = "26.04.2020";
const pattern = /(d{2}).(d{2}).(d{4})/;
const date = new Date(st.replace(pattern, '$3-$2-$1'));
console.log(date)
We get the parts of the date string with the pattern regex object.
Then we call replace on the st string and move the parts with the $ placeholder.
d extract digits.
The number in the curly braces is the number of digits to extract.
$1 is the first extracted part, which is '26'
$2 is the 2nd extracted part, which is '04'
And $3 is the 3rd extracted part, which is '2020' .
The Date constructor will create a UTC date.
So we get that date in string form is 'Sat Apr 25 2020 17:00:00 GMT-0700 (Pacific Daylight Time)’ .
moment.js
We can pass in a date string into moment.js’ moment function to convert it into an object we can manipulate.
For instance, we can write:
const momentDate = moment("12-25-2020", "MM-DD-YYYY");
to create a moment date object with the date string format specified in the 2nd argument.
We can use the isValid method to check for a valid date:
const isValid = moment("abc").isValid()
console.log(isValid)
isValid should false since 'abc' isn’t a valid date.
And we can convert a moment date object to a native JavaScript Date instance with toDate :
const date = moment("12-25-2020", "MM-DD-YYYY").toDate();
console.log(date)
Conclusion
To convert a date string to a JavaScript date object, we can either extract the parts of the date string ourselves and put it into the Date constructor.
Or we can use a third-party library like moment.js to help us make the job easier.