Получение неправильного месяца в moment.js

#javascript #angular

#javascript #momentjs

Вопрос:

Я использую Moment.js включено через RequireJS. Когда я звоню Moment().month() , вместо числа 11 я всегда получаю число 10. Есть идеи, как это может произойти?

Комментарии:

1. Разве январь не является месяцем 0 ? Note: Months are zero indexed, so January is month 0.

2. в дате javascript месяцы считаются 0-11. w3schools.com/jsref/jsref_obj_date.asp

3. Попробуйте Moment().format(«MM»)

4. Вы всегда можете использовать метод .add для учета нулевого индекса .add(1, ‘M’)

5. Спасибо @RenatoGama: он возвращает правильный номер месяца, начиная с единицы.

Ответ №1:

Согласно документации, месяцы индексируются на ноль. Таким образом, январь равен 0, а декабрь равен 11. moment().month() даст нулевой индекс текущего месяца (ноябрь), который равен 10.

Комментарии:

1. Просто уточнение. индексация месяцев на основе 0 — это функция, которая Moment.js наследуется от Javascript. См. Спецификацию ECMAScript в п.15.9.1.4 для получения дополнительной информации.

2. Почти похоже, что они должны выставлять его как 1-12 ради интуитивного использования вместо спецификации ECMAScript.

3. по этой логике, почему год, дата, часы и минуты не основаны на нуле? (snark, извините)

4. На самом деле они утверждают, что месяц не равен нулю: M ММ 1 .. 12 Месячный номер

5. Мы должны создать специальную веб-страницу, на которой указано общее время разработки, потраченное на это.

Ответ №2:

moment().month получает или устанавливает месяц и принимает числа от 0 до 11. Ключевым моментом здесь является то, что индекс начинается с 0, а не с 1. Приведенный ниже код будет работать как решение этого вопроса.

 {Moment(yourDate).month(Moment(yourDate).month()-1).format("MMMM Do YYYY")}
  

Приведенный выше код для 8/30/2022 покажет 30 августа 2022 года.

 {Moment(yourDate).month(Moment(yourDate).month()-1).format("MM-DD-YYYY")}
  

Приведенный выше код для 8/30/2022 покажет 08-30-2022.

 {Moment(yourDate).format("MM-DD-YYYY")}
  

Приведенный выше код для 8/30/2022 покажет 09-30-2022.