Как вернуть дату как dd-FullMonth-yyyy

У меня есть поле даты в списке SharePoint как mm/dd/yyyy

Я хочу перечислить это как dd MonthName yyyy

Когда я использую функцию ниже, она возвращает дату с добавлением одного месяца, например, если дата поля — 01.01.2019, она будет отображаться как 1 февраля 2019 года (вместо января отображается февраль).

Я пытался вычесть 1 из месячного индекса, но это не сработало.

function formatDate(thedate) {
  var monthNames = [
    "January", "February", "March",
    "April", "May", "June", "July",
    "August", "September", "October",
    "November", "December"
  ];
  var diffrentformat = thedate.split(" ")[0];
  var divideddate = diffrentformat.split("-");
  var d = new Date(divideddate[0], divideddate[1], divideddate[2]);
  //var d = new Date(thedate.split[]);
  var day = d.getDate();
  var monthIndex = d.getMonth();
  var year = d.getFullYear();

  return day + ' ' + monthNames[monthIndex] + ' ' + year;
}

Я ожидаю, что результат будет dd MonthName yyyy, но я получаю dd nextMonthName yyyy

Возможный дубликат Как отформатировать дату JavaScript

emix 28.05.2019 12:02

Действительно неэффективно анализировать строку для создания даты, а затем использовать методы даты, чтобы вернуть значения, с которых вы начали. Просто избавьтесь от даты и используйте значения, которые вы извлекли из строки.

RobG 28.05.2019 13:43
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
94
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

В javascript месяц начинается с 0-11.

Таким образом, вы должны установить индекс в соответствии с этим.

Массив OP также имеет названия месяцев от 0 до 11.

RobG 28.05.2019 13:49

Месяцы отсчитываются от нуля (0 = январь). Вы принимаете это во внимание при построении окончательной строки, но не при построении объекта даты:

  new Date(
   /*year*/ divideddate [0] ,
   /*month*/ divideddate [1] - 1,
   /*day*/ divideddate[2]
  );
Ответ принят как подходящий

Вы говорите, что ваш формат даты мм/дд/гггг, но ваш код выглядит так, как гггг-мм-дд.

Когда вы создаете дату, вы не вычитаете 1 из календарного месяца:

var d = new Date(divideddate[0], divideddate[1], divideddate[2]);

должно быть:

var d = new Date(divideddate[0], divideddate[1] - 1, divideddate[2]);

Однако вам не нужно создавать дату, проще и меньше кода просто использовать значения в строке:

// Reformat mm/dd/yyyy to d mmmm yyyy
function formatDate(thedate) {
  var monthNames = [
    "January", "February", "March",
    "April", "May", "June", "July",
    "August", "September", "October",
    "November", "December"
  ];
  var b = thedate.split(/\D/);
  return +b[1] + ' ' + monthNames[b[0]-1] + ' ' + b[2];
}

console.info(formatDate('5/28/2019'))

Обратите внимание, что массив месяцев устанавливает январь как индекс 0, февраль как индекс 2 и т. д., поэтому вы можете либо вычесть 1 из номера месяца в строке, либо опустить первый элемент в массиве. Я сделал первое.

Вы можете форматировать и возвращать, используя toLocaleDateString, как показано ниже:

  return  day + ' ' + d.toLocaleDateString('en-us', { month: 'long' }) + ' ' + year;

Нет необходимости поддерживать названия месяцев в списке.

Другие вопросы по теме