'transforming a date in Month day, YEAR format to YYYY-MM-DD format?

Is there a way to reformat a date using .replace and a regex? or a series of them?

for example I would like to turn May 4, 1981 into 1981-May-04... this would be good enough for my needs.

but even better would be to turn May 4, 1981 into 1981-05-04.

please note that single digit months and dates need to be changed to double digit (i.e. prefix a 0). The source text May 4, 1981 would not contain a leading 0 for the day ever.

the end result YYYY-MM-DD being sortable, which is why the leading 0 is important.



Solution 1:[1]

new Date('May 4, 1981').toLocaleDateString('en-CA') outputs '1981-05-04'

toLocaleDateString is pretty powerful - check it out: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

Alternatives:

  1. Write your own simple function to extract the date data, irrespective of the locale.

const date = new Date('May 4, 1981');

function getMyFormat(date) {
  return [
      date.getFullYear(), 
      date.getMonth().toString().padStart(2, '0'),
      date.getDay().toString().padStart(2, '0')
  ].join('-');
}

console.log(getMyFormat(date))
  1. Use the ISO string (standardized format of time representation here)
new Date(date).toISOString().split('T')[0]

It spits out a long string where, before the 'T', the format is YYYY-MM-DD.

There are some caveats to this, however, as it puts the date in the UTC timezone, which could affect your setup.

There is, however, an easy way to handle this:

new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000).toISOString().split('T')[0]

Over here, we calculate the timezone offset with respect to UTC so it should help you get the format you need.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1