Возвращает дд-мм-гггг из объекта Date()

Желаемое возвращаемое значение должно быть строкой в ​​формате dd-mm-yyyy.

Я пытаюсь указать дату формата dd-mm-yyyy для ISOString и добавить GMT, но код дает мне этот формат. Как я могу сделать?

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

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


person J.arc    schedule 07.03.2016    source источник
comment
Почему бы не использовать такую ​​библиотеку, как MomentJS?   -  person Soubhik Mondal    schedule 07.03.2016
comment
Я не могу в этом проекте. Другие решения?   -  person J.arc    schedule 07.03.2016
comment
Если 2012-11-04 14:55:45 неправильный формат, можете ли вы привести пример формата, который вы ищете?   -  person twernt    schedule 07.03.2016
comment
@twernt я ищу формат даты 04-11-2012   -  person J.arc    schedule 08.03.2016


Ответы (4)


я ищу формат даты 04-11-2012

Используя сегодняшнюю дату (которая в настоящее время является строкой ISO «2016-03-08T13:51:13.382Z»), вы можете сделать это:

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

Результат этого:

-> "08-03-2016"

Этот:

  1. Захватывает дату.
  2. Преобразует его в строку ISO.
  3. Заменяет букву «Т» и все после нее.
  4. Преобразует его в массив, разделяя на любой символ дефиса ('-'). (["2016", "03", "08"])
  5. Меняет порядок массива на обратный. (["08", "03", "2016"])
  6. Объединяет массив обратно в виде строки, разделяя каждое значение символом дефиса.

Вот демонстрация с использованием вашей даты (2012-11-04T14:55:45.000Z) в качестве входных данных:

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>

person James Donnelly    schedule 08.03.2016
comment
круто :) ‹3 ‹3 - person Arafath; 12.06.2018
comment
Я смотрю «2020-12-21», и new Date().toISOString().replace(/T.*/,'') это решило проблему. @Джеймс спасибо - person Ajay2707; 21.12.2020

Для вашего примера «2012-11-04 14:55:45»

Вы можете сделать: new Date('2012-11-04 14:55:45').toISOString().split('T')[0] в одной строке :)

person Filipe Andrade    schedule 19.06.2018

Вы можете использовать new Date().toLocaleDateString("en-US"); для возврата только даты. Это возвращает "3/8/2016" сегодня.

new Date().toLocaleDateString().replace(/\//g, '-'); изменит его на вывод с тире. Это вернет "3-8-2016" сегодня.

person davidcondrey    schedule 08.03.2016
comment
new Date().toLocaleDateString(undefined, { year: 'numeric', month: '2-digit', day: '2-digit' }).replace(/\//g, '-') для двузначных значений месяца/дня. - person darcher; 10.04.2020

Вы можете преобразовать локальную дату в дату UTC, добавив смещение часового пояса, а затем вызвав toLocaleDateString (британский формат), заменив косую черту тире и удалив запятую.

// 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; }

В качестве альтернативы вы можете попробовать проанализировать строку ISO 8601:

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; }

person Mr. Polywhirl    schedule 09.04.2021