#javascript #jquery
#javascript #jquery
Вопрос:
Я получаю дату, как 2014-07-04
в JS, а не время. Я хочу преобразовать эту дату ISO в формат, доступный для чтения человеком. Например: July 4, 2014
Комментарии:
1. Moment.js
2. ИМХО, если вы отклоните вопрос или ответ, было бы полезно узнать, почему. Я предполагаю, что этот вопрос получил отрицательные оценки, потому
2014-07-04
что это не дата в формате ISO, но если это так, мы должны указать на это вместе с отрицательным ответом.
Ответ №1:
Используйте Intl для форматирования даты. Проверьте ссылку MDN для получения дополнительной информации о Intl
const date = new Date('2014-07-04');
const dateTimeFormat = new Intl.DateTimeFormat('en', {
year: 'numeric',
month: 'long',
day: 'numeric',
});
console.log(dateTimeFormat.format(date));
Ответ №2:
Дата 2014-07-04
в вашем вопросе не в формате ISO. Примером даты в формате ISO является 2014-07-04T18:06:08-07:00
. Если мы хотим преобразовать это в July 4, 2014
, один из способов — использовать конструктор даты JavaScript.
var isoformat = 2014-07-04T18:06:08-07:00;
var readable = new Date(isoformat);
Теперь переменная readable
содержит строку Fri Jul 04 2014 21:06:08 GMT-0400 (Eastern Daylight Time)
. Отсюда нам нужно поместить месяц, день и год в собственные переменные.
var m = readable.getMonth(); // returns 6
var d = readable.getDay(); // returns 15
var y = readable.getFullYear(); // returns 2012
Поскольку месяц представлен числом, мы определяем массив месяцев, чтобы мы могли найти название месяца.
var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
Чтобы получить имя, мы используем значение m
, чтобы найти индекс в нужном нам массиве.
var mlong = months[m];
На случай, если вы еще не заметили, m
на единицу меньше числа, соответствующего июлю ( m = 6
но июль — это 7-й месяц в году). Однако это не проблема, потому что первый индекс в массиве равен нулю, что означает, что индекс 6 в нашем months
массиве равен July
.
Наш последний шаг — собрать все это вместе.
var fulldate = mlong " " d ", " y;
Посмотрите на скрипку.
Комментарии:
1.
2014-07-04
является полностью допустимой строкой даты в соответствии с ISO-8601. Нет никаких требований к включению времени. Ресурс, на который вы ссылаетесь, даже указывает это в первом приведенном примере.2. Важно использовать getDate() вместо getDay() ! getDay вернет неправильный день
Ответ №3:
function humanizeDate(date_str) {
month = ['January', 'Feburary', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
date_arr = date_str.split('-');
return month[Number(date_arr[1]) - 1] " " Number(date_arr[2]) ", " date_arr[0]
}
date_str = '2014-07-04';
console.log(humanizeDate(date_str));
Комментарии:
1. Нравится, насколько тонкий этот код, но я не думаю, что это сработало бы, если бы строка в
date_str
была в реальном формате ISO, например2014-07-04T18:06:08-07:00
.2. Не работает для дат ISO