Яма, с которой столкнулся JS при получении последнего дня текущего месяца

JavaScript

Ставь лайк и смотри, поиск в WeChat【Переезд в мир】Обратите внимание на этого человека, который не имеет большого фабричного прошлого, но имеет восходящий и позитивный настрой. эта статьяGitHub GitHub.com/QQ449245884…Он был включен, статьи были классифицированы, и многие мои документы и учебные материалы были систематизированы.

Все говорили, что нет проекта для написания резюме, поэтому я помог вам найти проект, и это было с бонусом.【Учебник по строительству】.

Чтобы лучше описать содержание этого раздела, вот совет для JS по работе с датами,Чтобы получить последний день предыдущего месяца, просто установите для параметра SetDate значение 0.

var endDate = new Date();
//上个月最后一天
endDate.setDate(0);

Затем начинается текст:

Чтобы использовать JS для получения последнего дня текущего месяца, наша обычная идея состоит в том, чтобы сначала получить первый день следующего месяца, а затем вычесть один день, который является последним днем ​​​​текущего месяца, поэтому следующий код естественно использовал:

var date= new Date();
date.setMonth(date.getMonth() + 1);
//日期设置为0号, 0表示1号的前一天
let lastDay = date.setDate(0);
console.log('最后一天:' + new Date(lastDay).toLocaleString())

Дата, когда я написал эту статью,2019.08.21, поэтому результат печати выглядит следующим образом:

最后一天:2019/8/31 下午4:10:43

Мы не уверены, есть ли баги в таком алгоритме, поэтому, чтобы восстановить сцену, теперь начнем с2019.01.31попробуй один за другим

var date= new Date(2019, 0, 31); //0 表示1月
date.setMonth(date.getMonth() + 1);
// 日期设置为0号, 0表示1号的前一天
let lastDay = date.setDate(0);
console.log('最后一天:' + new Date(lastDay).toLocaleString())

Распечатать:

最后一天:2019/2/28 上午12:00:00

Мы видим, что мы положили1月31号Наберите один месяц назад и вычтите один день вперед, вы должны получить1月31号, что на самом деле получается2月28号, поэтому код, который мы написали, содержит ошибки.

Что за чертовщина?

Мы можем перечислить месяцы:

1月   1 ....... 28 29 30 31
2月   1 ....... 28 
3月   1 ....... 28 29 30 31

мы проходимmonth + 1, в JS это будет пониматься как:

当前日期 + 当月的天数

Итак, в приведенном выше примереdate.setMonth(date.getMonth() + 1)Эквивалентно1月31号 + 31天, согласно приведенному выше списку, вы можете видеть, что результат3月3号

Так что не думайте, что месяц + 1 - это месяц плюс 1, это означает текущую дату плюс количество дней в месяце..

Итак, как мы можем гарантировать, что не будем прыгать еще месяц?

Просто гарантияmonth + 1не более чем28Вот так, как ты это делаешь?

Оценивать:

  • № 31 + 31 превысит
  • № 30 + 31 превысит
  • № 29 + 31 превысит
  • 28 + 31 или 28 в самый раз

Итак, секрет в том, чтобы положить31перезвонить28Этого числа достаточно, поэтому просто добавьте следующее предложение:

date.setDate(28)

Полный код:

var date= new Date(2019, 0, 31); //0 表示1月
date.setDate(28)
date.setMonth(date.getMonth() + 1);
// 日期设置为0号, 0表示1号的前一天
let lastDay = date.setDate(0);
console.log('最后一天:' + new Date(lastDay).toLocaleString())    

результат операции:

最后一天:2019/1/31 上午12:00:00    

Ошибки, которые могут существовать после развертывания кода, не могут быть известны в режиме реального времени.Чтобы решить эти ошибки впоследствии, много времени тратится на отладку журнала.Кстати, я рекомендую всем полезный инструмент мониторинга ошибок.Fundebug.

общаться с

Статья постоянно обновляется каждую неделю. Вы можете выполнить поиск «Big Move to the World» в WeChat, чтобы прочитать и обновить ее как можно скорее (на одну или две статьи раньше, чем в блоге). Эта статья находится на GitHub.GitHub.com/QQ449245884…Он был включен, и многие мои документы были разобраны. Добро пожаловать в Звезду и совершенство. Вы можете обратиться в тестовый центр для ознакомления во время собеседования. Кроме того, обратите внимание на паблик-аккаунт и ответьте в фоновом режиме.Благосостояние, вы можете увидеть преимущества, вы знаете.