11

Desired return value should be a string formatted as dd-mm-yyyy.

Im trying to give a format date dd-mm-yyyy to ISOString and adding GMT but the code gives me this format. How can i do?

new Date().toISOString()
    .replace(/T/, ' ').      // replace T with a space
    .replace(/\..+/, '');     // delete the dot and everything after

'2012-11-04 14:55:45'

davidcondrey
  • 31,889
  • 15
  • 109
  • 134
J.arc
  • 167
  • 1
  • 1
  • 12

4 Answers4

13

im looking for 04-11-2012 date format

Using today's date (which as an ISO string is currently "2016-03-08T13:51:13.382Z"), you can do this:

new Date().toISOString().replace(/T.*/,'').split('-').reverse().join('-')

The output of this is:

-> "08-03-2016"

This:

  1. Grabs the date.
  2. Converts it to an ISO string.
  3. Replaces the 'T' and everything after it.
  4. Converts it into an array by splitting on any hyphen ('-') character. (["2016", "03", "08"])
  5. Reverses the order of the array. (["08", "03", "2016"])
  6. Joins the array back as a string, separating each value with a hyphen character.

Here is a demo using your date (2012-11-04T14:55:45.000Z) as input:

var input = "2012-11-04T14:55:45.000Z",
    output;

output = new Date(input).toISOString().replace(/T.*/,'').split('-').reverse().join('-');

document.getElementById('input').innerHTML = input;
document.getElementById('output').innerHTML = output;
<p><strong>Input:</strong> <span id=input></span></p>
<p><strong>Output:</strong> <span id=output></span></p>
James Donnelly
  • 122,518
  • 33
  • 200
  • 204
  • 1
    I am looking '2020-12-21' and `new Date().toISOString().replace(/T.*/,'')` this solved the issue . @james thanks – Ajay2707 Dec 21 '20 at 14:42
5

You can use new Date().toLocaleDateString("en-US"); to return only the date. This returns "3/8/2016" today.

new Date().toLocaleDateString().replace(/\//g, '-'); will change it to output with dashes. This will return "3-8-2016" today.

davidcondrey
  • 31,889
  • 15
  • 109
  • 134
  • 1
    `new Date().toLocaleDateString(undefined, { year: 'numeric', month: '2-digit', day: '2-digit' }).replace(/\//g, '-')` for two digit month/day values. – darcher Apr 10 '20 at 13:51
5

For your example '2012-11-04 14:55:45'

You can do: new Date('2012-11-04 14:55:45').toISOString().split('T')[0] in a single line :)

1

You can convert the local date into a UTC date by adding the timezone offset, then calling toLocaleDateString (British format) while replacing the slashes with dashes and removing the comma.

// Adapted from: https://stackoverflow.com/a/55571869/1762224
const toLocaleUTCDateString = (date, locales, options) =>
  new Date(date.valueOf() + (date.getTimezoneOffset() * 6e4))
    .toLocaleDateString(locales, options);

// 'en-GB' === 'dd/mm/yyyy'
const formatDate = date =>
  toLocaleUTCDateString(date, 'en-GB', {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit'
  })
  .replace(/\//g, '-').replace(/,/, '');

const date = new Date();

console.log({
  'ISO-8601': date.toISOString(),
  'Custom': formatDate(date)
});
.as-console-wrapper { top: 0; max-height: 100% !important; }

Alternatively, you can try parsing the ISO 8601 string:

const formatDate = _date =>
  (([year, month, date, hour, minute, second, milliseconds]) =>
    `${date}-${month}-${year} ${hour}:${minute}:${second}`)
  (_date.toISOString().split(/[^\d]/g));

const date = new Date();

console.log({
  'ISO-8601': date.toISOString(),
  'Custom': formatDate(date)
});
.as-console-wrapper { top: 0; max-height: 100% !important; }
Mr. Polywhirl
  • 35,562
  • 12
  • 75
  • 123