У меня есть поле даты в списке 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 месяц начинается с 0-11.
Таким образом, вы должны установить индекс в соответствии с этим.
Массив OP также имеет названия месяцев от 0 до 11.
Месяцы отсчитываются от нуля (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;
Нет необходимости поддерживать названия месяцев в списке.
Возможный дубликат Как отформатировать дату JavaScript