12

Форматирование даты в JavaScript в виде yyyy-mm-dd

12

Я столкнулся с проблемой, связанной с преобразованием даты в JavaScript. У меня есть дата в формате Sun May 11,2014, и мне нужно преобразовать её в формат 2014-05-11.

Вот мой текущий код:

function taskDate(dateMilli) {
    var d = (new Date(dateMilli) + '').split(' ');
    d[2] = d[2] + ',';

    return [d[0], d[1], d[2], d[3]].join(' ');
}

var datemilli = Date.parse('Sun May 11,2014');
console.log(taskDate(datemilli));

Однако приведённый код возвращает дату в том же формате, а именно sun may 11,2014, что мне не подходит.

Как я могу исправить свой код, чтобы получить желаемый формат 2014-05-11?

5 ответ(ов)

9

Вы можете использовать следующую функцию для форматирования даты в строку формата 'YYYY-MM-DD':

function formatDate(date) {
    var d = new Date(date),
        month = '' + (d.getMonth() + 1),
        day = '' + d.getDate(),
        year = d.getFullYear();

    if (month.length < 2) 
        month = '0' + month;
    if (day.length < 2) 
        day = '0' + day;

    return [year, month, day].join('-');
}
 
console.log(formatDate('Sun May 11,2014'));

Пример использования:

console.log(formatDate('Sun May 11,2014'));

Вывод:

2014-05-11

Демо на JSFiddle: http://jsfiddle.net/abdulrauf6182012/2Frm3/

4

Чтобы получить дату в формате yyyy-mm-dd, вы можете использовать следующий способ:

var todayDate = new Date().toISOString().slice(0, 10);
console.log(todayDate);

Этот код создает новый объект Date, затем преобразует его в строку ISO с помощью метода toISOString(), и с помощью slice(0, 10) вырезает первые 10 символов, что соответствует нужному формату даты. В результате переменная todayDate будет содержать текущую дату в формате yyyy-mm-dd.

2

Самый простой способ преобразовать вашу дату в формат yyyy-mm-dd, это сделать так:

var date = new Date("Sun May 11, 2014");
var dateString = new Date(date.getTime() - (date.getTimezoneOffset() * 60000))
                    .toISOString()
                    .split("T")[0];

Как это работает:

  • new Date("Sun May 11, 2014") преобразует строку "Sun May 11, 2014" в объект даты, который представляет время Sun May 11 2014 00:00:00 в часовом поясе, основанном на текущих настройках локали (настройках системы).
  • new Date(date.getTime() - (date.getTimezoneOffset() * 60000)) конвертирует вашу дату в объект даты, который соответствует времени Sun May 11 2014 00:00:00 в UTC (стандартное время), вычитая смещение часового пояса.
  • .toISOString() преобразует объект даты в строку ISO 8601 2014-05-11T00:00:00.000Z.
  • .split("T") разбивает строку на массив ["2014-05-11", "00:00:00.000Z"].
  • [0] берет первый элемент этого массива.

Пример

var date = new Date("Sun May 11, 2014");
var dateString = new Date(date.getTime() - (date.getTimezoneOffset() * 60000))
                    .toISOString()
                    .split("T")[0];

console.log(dateString);

Примечание:

Первая часть кода (new Date(...)) может потребовать небольших корректировок, если ваш формат входных данных отличается от формата, указанного автором вопроса. Как mikeypie упомянул в комментариях, если строка даты уже находится в ожидаемом формате выходных данных и локальный часовой пояс находится к западу от UTC, то new Date('2022-05-18') приведет к результату 2022-05-17. Кроме того, локаль пользователя (например, MM/DD/YYYY против DD-MM-YYYY) также может повлиять на то, как дата интерпретируется с помощью new Date(...). Поэтому обязательно проведите тестирование, если собираетесь использовать этот код для различных форматов входных данных.

0

В сочетании с другими ответами, можно использовать следующий код для форматирования даты в формате YYYY-MM-DD:

var d = new Date(date);
date = [
  d.getFullYear(),
  ('0' + (d.getMonth() + 1)).slice(-2),
  ('0' + d.getDate()).slice(-2)
].join('-');

Этот код создает новый объект даты из переданного значения date, затем извлекает год, месяц и день, добавляя нули перед значениями месяца и дня, чтобы обеспечить двузначный формат. Наконец, все части объединяются с помощью дефиса для получения нужного формата.

0

Вы можете использовать следующую функцию date2str, чтобы преобразовать объект даты в строку с заданным форматом. Вот как она работает:

format = function date2str(x, y) {
    var z = {
        M: x.getMonth() + 1,
        d: x.getDate(),
        h: x.getHours(),
        m: x.getMinutes(),
        s: x.getSeconds()
    };
    y = y.replace(/(M+|d+|h+|m+|s+)/g, function(v) {
        return ((v.length > 1 ? "0" : "") + z[v.slice(-1)]).slice(-2)
    });

    return y.replace(/(y+)/g, function(v) {
        return x.getFullYear().toString().slice(-v.length)
    });
}

Пример использования:

Вы можете вызвать эту функцию следующим образом:

format(new Date('Sun May 11, 2014'), 'yyyy-MM-dd')

Ожидаемый результат:

"2014-05-11"

Эта функция принимает два параметра: объект даты и строку формата. Она заменяет в строке формата соответствующие части на значения из объекта даты. Обратите внимание, что M соответствует месяцу, d — дню, h — часам, m — минутам, и s — секундам. Функция также корректно обрабатывает, чтобы добавить ноль перед однозначными числами, если это необходимо.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь