javascript - 每月订阅的 Javascript 日期函数
问题描述
我正在尝试计算每月订阅的日期。我已经看到了许多使用以下差异的答案:
const oneMonthFromNow = new Date(new Date().setMonth(new Date().getMonth()+1));
但是当我针对边缘情况测试它时,它不能按预期工作,一些例子:
- 今天:3 月 31 日 => 预期:4 月 30 日 => 输出:5 月 1 日(因为 31 不存在......?)
- 今天:1 月 30 日 => 预期:2 月 28 日 => 输出:3 月 2 日(闰年呢??)
关于如何在不添加例外规则的情况下完成这项工作的任何想法?
解决方案
我会按照以下方式做一些事情:
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()));
推荐阅读
- javascript - 在 Flutter Webview 中运行一些 Javascript 文件,例如 index.js
- mysql - 没有唯一值的连接表
- python - 验证集小于批量大小的 Keras DataGenerator 不进行验证
- mysql - 在使用内连接时限制在 SQL 中连接的行数,limit 和 order by
- mysql - 外部 GUID 以满足 mysql 中的唯一约束
- pointers - go中form参数为map时,传入的是什么?
- r - r edgar 错误:输入年份不是数字
- r - 如何根据与先前变量的加法累加创建新变量
- ms-access - 修改 groupby 查询中的记录
- c# - Roslyn:WorkspaceChangeKind.DocumentRemoved 从未提出过