Форматирование даты в JavaScript в виде yyyy-mm-dd
Я столкнулся с проблемой, связанной с преобразованием даты в 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 ответ(ов)
Вы можете использовать следующую функцию для форматирования даты в строку формата '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/
Чтобы получить дату в формате 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.
Самый простой способ преобразовать вашу дату в формат 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 86012014-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(...). Поэтому обязательно проведите тестирование, если собираетесь использовать этот код для различных форматов входных данных.
В сочетании с другими ответами, можно использовать следующий код для форматирования даты в формате YYYY-MM-DD:
var d = new Date(date);
date = [
d.getFullYear(),
('0' + (d.getMonth() + 1)).slice(-2),
('0' + d.getDate()).slice(-2)
].join('-');
Этот код создает новый объект даты из переданного значения date, затем извлекает год, месяц и день, добавляя нули перед значениями месяца и дня, чтобы обеспечить двузначный формат. Наконец, все части объединяются с помощью дефиса для получения нужного формата.
Вы можете использовать следующую функцию 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 — секундам. Функция также корректно обрабатывает, чтобы добавить ноль перед однозначными числами, если это необходимо.
Где найти документацию по форматированию даты в JavaScript?
Получить название месяца из даты
JavaScript: Добавление ведущих нулей к дате
Как преобразовать дату в UTC?
Как вычислить количество дней между двумя датами?