这个计算器能做什么
日期加月份计算器可以把任意一个起始日期向后推移若干个月(如果填入负数,则向前推移),并给出准确的结果日期。和单纯地加上固定天数不同,按"月"来推算日期需要特别处理一种情况:当目标月份的天数比起始月份少时该怎么办——而本工具会自动帮你搞定。
如何使用
先选择起始日期,再填入要加上的月份数(想往回推算就填负数),即可读取结果日期。下方的明细表会列出结果对应的年、月、日,并在日期被调整到月末时给出提示。
计算公式详解
计算时先得到月份序号:(年 × 12)+(月 − 1)+ N。把这个结果除以 12,商即为新的年份,余数即为新的月份。日期部分保持不变——除非它在新月份里根本不存在。举个例子,1 月 31 日加上 1 个月不可能是"2 月 31 日",于是日期会被调整到该月的最后一天(28 或 29)。这与大多数电子表格和编程类库中日期函数的处理方式一致。
$$\text{Result} = \text{Date}(Y, M+N, \min(D, \text{lastDay}(Y, M+N)))$$
$$M_{new} = ((M-1)+N) \bmod 12 + 1$$
$$D_{new} = \min(D, \text{lastDay}(Y_{new}, M_{new}))$$
实例演示
起始日期为 2024-01-31,加上 1 个月。目标月份是 2024 年 2 月,而 2024 年是闰年,2 月有 29 天。由于 \(31 > 29\),日期被调整为 29,最终结果是 2024-02-29。
每个月的天数
由于月份的长度不同,您开始的那一天可能在目标月份中不存在。下面的参考资料列出了公历中每个月的天数。
| # | 月份 | 天数 |
|---|---|---|
| 1 | 一月 | 31 |
| 2 | 二月 | 28(闰年29天) |
| 3 | 三月 | 31 |
| 4 | 四月 | 30 |
| 5 | 五月 | 31 |
| 6 | 六月 | 30 |
| 7 | 七月 | 31 |
| 8 | 八月 | 31 |
| 9 | 九月 | 30 |
| 10 | 十月 | 31 |
| 11 | 十一月 | 30 |
| 12 | 十二月 | 31 |
四个有30天的月份是四月、六月、九月和十一月;其余的有31天,除了二月。二月是唯一长度会改变的月份:在闰年有29天,否则有28天。
闰年的判断方法
根据公历,一个年份是闰年,如果满足以下规则:
- 该年份能被4整除,并且
- 它不能被100整除,除非
- 它也能被400整除。
所以2020年和2024年是闰年(能被4整除,但不能被100整除)。1900年不是闰年(能被100整除但不能被400整除),而2000年是闰年(能被400整除)。这就是为什么\(一月\ 31 + 1\)个月在2023年给出二月28日,但在2024年给出二月29日。
常见问题
遇到月末会怎样?如果起始日期的"日"在目标月份中不存在,就会自动调整到该月的最后一天。
可以减去月份吗?可以——填入负数即可,例如填 -3 就表示往回推算三个月。
能正确处理闰年吗?能。计算"当月最后一天"时会自动判断是否为闰年,因此在 1 月 31 日上加一个月,闰年会落在 2 月 29 日,平年则落在 2 月 28 日。