Дата ISO JavaScript для чтения человеком

#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