#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.