Форматирование даты в 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?