首页 > 解决方案 > 每月订阅的 Javascript 日期函数

问题描述

我正在尝试计算每月订阅的日期。我已经看到了许多使用以下差异的答案:

const oneMonthFromNow = new Date(new Date().setMonth(new Date().getMonth()+1));

但是当我针对边缘情况测试它时,它不能按预期工作,一些例子:

关于如何在不添加例外规则的情况下完成这项工作的任何想法?

标签: javascriptdate

解决方案


我会按照以下方式做一些事情:

function isLeapYear(year){
  return year % 4 === 0 && (year % 400 === 0 || year % 100 !== 0);
}
function lastMonthDay(jsMonth, year){
  switch(jsMonth){
    case 1:
      return isLeapYear(year) ? 29 : 28;
    case 3: case 5: case 8: case 10:
      return 30;
    default:
      return 31;
  }
}
const dt = new Date('January 30, 2022');
console.log(lastMonthDay(dt.getMonth()+1, dt.getFullYear()));


推荐阅读