天数计算方法|两个日期之间相差几天?几天后、几天前怎么算
“4月1日到10月21日一共多少天?”“今天起100天后是星期几?”“签约后30天内,截止到哪天?”计算天数看似只是一次减法,但第一天算不算进去就会差1天,月份天数或闰年数错了还会再差1到2天。本文用实际日期逐一验证,整理两个日期之间天数的基本公式、算头不算尾与首尾都算(首日不计入/首日计入)的区别、跨月的数法、1月1日起的年内天数速查表、几天后与几天前的日期和星期的算法、“1个月”和“30天”的区别,以及 Excel 和表格软件的公式。
结论:天数=结束日-开始日,算不算两端再±1
两个日期之间的天数,用结束日减去开始日求得。这样得到的是“只算一端”的天数,与“几天后”“几天前”“住几晚”的算法相同。开始日和结束日都要算进去时加1,两端都不算时减1。计算天数时的困惑,几乎都出在这个±1的选择上。
| 算法 | 公式 | 例:11月1日〜11月10日 | 常见场景 |
|---|---|---|---|
| 只算一端(算头不算尾) | 结束 − 开始 | 9天 | 几天后、几天前、已过天数、住宿晚数、法律上的期间(首日不计入) |
| 首尾都算 | 结束 − 开始 + 1 | 10天 | “从某日到某日”“为期几天”、住院天数、旅行天数、活动举办期间 |
| 首尾都不算(只算中间) | 结束 − 开始 − 1 | 8天 | 两个安排之间隔了几天、“中间空出几天” |
为什么会差1天?这和植树问题一样。在日历上把11月1日到11月10日都画上圈,一共是10个圈,但圈与圈之间(日期变化的次数)只有9个间隔。“几天后”数的是间隔,“为期几天”数的是圈,这样记就不容易出错。
什么时候只算一端、什么时候首尾都算(按场景速查)
同样是“10天”,不同场景对第一天算不算有各自的规则。只算一端也叫“首日不计入”,从第一天算起叫“首日计入”。下面列出常见场景,并附上与日本规定不同时的说明。
| 场景 | 算法 | 例子 |
|---|---|---|
| 几天后、几天前 | 只算一端(基准日为第0天) | 11月1日的10天后是11月11日 |
| 从某日到某日、为期几天 | 首尾都算 | 11月1日〜11月10日为期10天 |
| 酒店住宿晚数与旅行天数 | 晚数只算一端,天数首尾都算 | 8月10日〜8月16日是6晚7天 |
| 日本法律上的期间(日本民法第140条) | 首日不计入(从次日起算) | 11月1日收到、“10日内” → 截至11月11日 |
| 日本的冷静期(上门推销等) | 首日计入(收到书面材料当天为第1天) | 11月1日收到 → 截至11月8日 |
| 日本的周岁年龄(《年龄计算法》) | 首日计入(从出生当天起算) | 在生日前一天结束时长一岁 |
| 住院天数(医疗保险等) | 首尾都算(含入院日和出院日) | 住院1晚算2天 |
| 头七、七七(四十九日)等法事 | 去世当天为第1天(首日计入) | 七七(第49天)是忌日的48天后 |
| 日本婴儿的“出生后第几天”仪式 | 出生当天为第1天(首日计入) | 百日宴(第100天)是生日的99天后 |
日本民法第140条规定:以日、周、月、年定期间的,期间的首日不计入。如果11月1日被告知“请在10日内答复”,就从次日11月2日开始数,截止到第10天11月11日结束。不过,期间正好从零点开始时(例如事先约定“从11月1日起10天”),首日也计入。冷静期和年龄计算等则由其他法律明确规定首日计入。中国《民法典》第201条同样规定:按照年、月、日计算期间的,开始的当日不计入,自下一日开始计算。
把忌日或生日记为第1天的算法,会比显示已过天数(基准日为第0天)的工具早1天。恋爱纪念日等日子的算法,可参考纪念日天数的数法,里面整理了如何配合各种习惯来数。
跨月天数的数法与各月天数
同一个月内只要把日期数字相减即可,跨月时则需要把中间各月的天数加起来。各月天数如下,只有2月会因是否闰年而在28天和29天之间变化。
| 月份 | 天数 | 月份 | 天数 |
|---|---|---|---|
| 1月 | 31天 | 7月 | 31天 |
| 2月 | 28天(闰年29天) | 8月 | 31天 |
| 3月 | 31天 | 9月 | 30天 |
| 4月 | 30天 | 10月 | 31天 |
| 5月 | 31天 | 11月 | 30天 |
| 6月 | 30天 | 12月 | 31天 |
没有31日的“小月”是2、4、6、9、11月。中文里常用“一三五七八十腊,三十一天永不差”来记大月(1、3、5、7、8、10、12月),也可以数拳头的指节:凸起的指节是31天的大月,凹下去的是小月。日本则用谐音“西向武士(nishi muku samurai)”来记这5个小月。
- 1
算出第一个月剩下的天数
从3月15日数到6月30日(只算一端),3月是31 − 15 = 16天(不算3月15日,即3月16日〜31日共16天)。
- 2
加上中间的整月
加上4月的30天和5月的31天,到这里是16 + 30 + 31 = 77天。
- 3
加上最后一个月的日期
6月数到30日,所以加30,77 + 30 = 107天。如果首尾都算(3月15日也算),再加1就是108天。
闰年是公历年份能被4整除的年份(例外是:能被100整除的年份为平年,能被400整除的年份为闰年)。下一个闰年是2028年,包含2月29日的期间会比平年的同一期间多1天:2027年2月1日到3月1日是28天,2028年同一期间是29天。判断规则的细节请看闰年的判断规则。
年内天数(1月1日起第几天)速查表
想一次处理好跨月的计算,可以使用把1月1日记为第1天的“年内天数”。两个日期的年内天数相减,就是只算一端的天数。下表是各月1日的年内天数,当月某日的年内天数=“表中数字 + 日期 − 1”。
| 月份 | 1日的年内天数(平年) | 1日的年内天数(闰年) | 月末的年内天数(平年) |
|---|---|---|---|
| 1月 | 1 | 1 | 31 |
| 2月 | 32 | 32 | 59 |
| 3月 | 60 | 61 | 90 |
| 4月 | 91 | 92 | 120 |
| 5月 | 121 | 122 | 151 |
| 6月 | 152 | 153 | 181 |
| 7月 | 182 | 183 | 212 |
| 8月 | 213 | 214 | 243 |
| 9月 | 244 | 245 | 273 |
| 10月 | 274 | 275 | 304 |
| 11月 | 305 | 306 | 334 |
| 12月 | 335 | 336 | 365 |
- 同一年内:2026年4月1日是第91天,10月21日是274 + 21 − 1 = 第294天,两者相差294 − 91 = 203天
- 跨年:从2026年12月24日(第358天)到2027年1月10日,是年底前的365 − 358 = 7天加上新年的10天,共17天
- 到年底还剩几天:10月21日(第294天)到12月31日是365 − 294 = 71天,到第二年元旦则是72天
- 闰年从3月起每个日期的年内天数都大1,全年共366天
几天后、几天前的日期算法与速查表
“几天后”就是在基准日上加上天数。基准日记为第0天,所以11月1日的1天后是11月2日,10天后是11月11日。超过月底时,减去当月天数,转入下个月。
- 1
日期数字加上天数
求11月1日的45天后,1 + 45 = 46。11月只有30天,所以结果不在11月内。
- 2
减去当月天数,进入下个月
46 − 30 = 16,即12月16日。如果数字仍然太大,就依次减去12月的31天、1月的31天……
- 3
几天前就反过来减
求11月1日的30天前,1 − 30 = −29。加上前一个月10月的31天,−29 + 31 = 2,即10月2日。
| 天数 | 2026年11月1日(周日)的几天后 | 星期 | 大约 |
|---|---|---|---|
| 7天后 | 11月8日 | 日 | 1周后,星期相同 |
| 10天后 | 11月11日 | 三 | |
| 14天后 | 11月15日 | 日 | 2周后 |
| 30天后 | 12月1日 | 二 | 约1个月 |
| 45天后 | 12月16日 | 三 | 约1个半月 |
| 60天后 | 12月31日 | 四 | 约2个月 |
| 90天后 | 2027年1月30日 | 六 | 约3个月 |
| 100天后 | 2027年2月9日 | 二 | 约3个月零1周 |
| 180天后 | 2027年4月30日 | 五 | 约半年 |
| 200天后 | 2027年5月20日 | 四 | |
| 300天后 | 2027年8月28日 | 六 | 约10个月 |
| 365天后 | 2027年11月1日 | 一 | 1年后(跨平年时) |
| 500天后 | 2028年3月15日 | 三 | 约1年4个月 |
| 1000天后 | 2029年7月28日 | 六 | 约2年9个月 |
反过来,2026年11月1日的30天前是10月2日(周五),100天前是7月24日(周五)。从考试日或出发日倒推、制定“提前100天开始准备”之类的计划时很有用。
心算几天后是星期几(除以7的余数)
星期每7天循环一次,所以只要把天数除以7,按余数把星期往后推,就能知道几天后是星期几。不用翻日历,周日的100天后就是“100 ÷ 7 = 14 余 2”,从周日往后推2天,即周二。
| 除以7的余数 | 星期的变化 | 对应天数举例 |
|---|---|---|
| 0 | 星期相同 | 7天、14天、28天、70天、91天、364天 |
| 1 | 往后推1天 | 15天、50天、120天、365天 |
| 2 | 往后推2天 | 30天、100天、366天 |
| 3 | 往后推3天 | 10天、45天、500天 |
| 4 | 往后推4天 | 60天、200天 |
| 5 | 往后推5天 | 180天 |
| 6 | 往后推6天(等于往前推1天) | 90天、300天、1000天 |
- 平年的1年后(365天后)星期往后推1天,跨过2月29日的1年后(366天后)往后推2天。每年生日的星期逐年后移,就是这个原因
- 几天前的星期则往前推。100天前余数为2,从周日往前推2天是周五
- 30天后星期往后推2天,所以“每月同一天”的安排,遇到30天的月份星期后移2天,遇到31天的月份后移3天
“1个月后”不等于“30天后”|以月、周定的期间怎么数
“1个月”“3个月”“1年”这类以月或年定的期间,不按天数,而按日历上的对应日来数。1个月不一定是30天,先换算成天数再算,会因月份不同差1到3天。
| 基准日 | 1个月后(按日历) | 30天后(按天数) | 相差 |
|---|---|---|---|
| 2026年11月1日 | 12月1日 | 12月1日 | 无 |
| 2026年12月1日 | 2027年1月1日 | 12月31日 | 1天 |
| 2027年1月31日 | 2月28日(没有2月31日,取月末) | 3月2日 | 2天 |
| 2026年11月1日的3个月后 | 2027年2月1日(92天后) | 90天后是1月30日 | 2天 |
日本民法第143条规定,以周、月、年定的期间按日历计算,在最后一周、月、年中与起算日对应之日的前一天届满;最后一个月没有对应日时(例如从1月31日数到2月),在该月最后一天届满。例如首日不计入、从11月15日起1个月,起算日是11月16日,届满日是12月16日的前一天,即12月15日。中国《民法典》第202条也规定,按照年、月计算期间的,到期月的对应日为期间的最后一日,没有对应日的,月末日为期间的最后一日,同样以日期而不是天数来数。合同或手续写着“1个月内”“3个月内”时,请按日期而不是天数来数。
| 天数 | 换算成周 | 换算成月(约) |
|---|---|---|
| 7天 | 1周 | 约0.2个月 |
| 30天 | 4周零2天 | 约1个月 |
| 60天 | 8周零4天 | 约2个月 |
| 90天 | 12周零6天 | 约3个月 |
| 100天 | 14周零2天 | 约3.3个月 |
| 180天 | 25周零5天 | 约6个月 |
| 365天 | 52周零1天 | 约12个月(1年) |
把天数换算成月数时的“约”,是按每月平均30.44天(365.25 ÷ 12)除得的近似值。需要精确的“几年几个月几天”时,用按日期计算的工具更可靠。“几岁几个月”这类年龄期间的数法,可参考年龄的计算方法。
用 Excel 和表格软件计算天数的公式
在 Excel 和 Google 表格中,日期以叫作“序列值”的连续编号保存(Excel 中1900年1月1日为1)。因此日期相减就得到天数,日期加上数字就得到几天后的日期。A2 为开始日、B2 为结束日时,公式如下。
| 想做的事 | 公式 | 结果示例(A2 = 2026/4/1,B2 = 2026/10/21) |
|---|---|---|
| 间隔天数(只算一端) | =B2-A2 | 203 |
| 首尾都算的天数 | =B2-A2+1 | 204 |
| 天数(用函数写) | =DATEDIF(A2,B2,"D") | 203 |
| 整月数、整年数 | =DATEDIF(A2,B2,"M")、=DATEDIF(A2,B2,"Y") | 6、0 |
| 距今天的天数 | =B2-TODAY() | 随打开的日期变化 |
| 100天后的日期 | =A2+100 | 2026/7/10 |
| 1个月后的日期(遇月末取月末) | =EDATE(A2,1) | 2026/5/1 |
| 排除周末的天数(首尾都算) | =NETWORKDAYS(A2,B2,节假日范围) | 传入节假日列表即可同时排除节假日 |
| 3个工作日后的日期 | =WORKDAY(A2,3,节假日范围) | 不计入基准日 |
| 显示星期 | =TEXT(A2,"aaaa") | 星期三 |
- 减法结果显示成“1900/7/21”这样的日期时,把单元格格式改为“常规”或“数值”,就会变成203这样的天数
- DATEDIF 是不出现在函数列表中的隐藏函数,但 Excel 和 Google 表格都能用。开始日晚于结束日时会报错,请注意日期顺序
- 微软官方提醒,DATEDIF 的 "MD"(不足一个月的天数)在跨月末时可能得到不准确的结果。计算“几个月几天”时请验算
- NETWORKDAYS 同时计入开始日和结束日,WORKDAY 则不计基准日、从下一个工作日开始数。不同函数对两端的处理不同,也是天数出错的常见原因
排除周末和节假日的天数(工作日)是另一种数法
到这里为止的天数,都是周末和节假日也算1天的“日历天数”。以工作日规定的期限,如“3个工作日后”“10个工作日内”,要跳过休息日来数,所以会比同样天数的日历日更晚。以周五为基准的3个工作日后是下周三,按日历是5天后。
| 算法 | 计入的日子 | 2026年10月2日(周五)的3天后 |
|---|---|---|
| 日历天数 | 所有日子 | 10月5日(周一) |
| 工作日(周末和节假日休息) | 只算营业的日子 | 10月7日(周三) |
工作日从哪天开始数、跨越长假时会如何推迟,请参考工作日的数法。
计算天数时的常见错误
| 常见错误 | 例子 | 正确的思路 |
|---|---|---|
| “为期几天”只用减法 | 把11/1〜11/10算成9天 | 首尾都算,要+1,为10天 |
| “几天后”多加了1 | 把11/1的10天后算成11/12 | 基准日为第0天,10天后是11/11 |
| 所有月份都按30天算 | 把3/15〜6/30算成105天 | 按各月实际天数相加,为107天 |
| 认定2月只有28天 | 把2028/2/1〜3/1算成28天 | 2028年是闰年,为29天 |
| 把“1个月内”按30天算 | 把1/31的1个月后算成3/2 | 按日历数,为2月最后一天 |
| Excel 结果显示为日期就慌了 | =B2-A2 显示 1900/7/21 | 把格式改为数值,就是203天 |
这些错误只要确认两点就能避免:“开始日算不算”和“中间的月份各有几天”。手算的天数,可以反过来加回去,看看能否回到原来的日期。越重要的期限,越值得把算出的日期和数法记下来。
用工具计算天数的步骤
日期之间的天数,可以用工作日计算工具和年龄·纪念日计算工具直接在浏览器中算出。两者输入的日期都只在浏览器内计算,不会发送到服务器。
- 1
两个日期间的天数:工作日计算工具的“期间的工作日数”标签页
输入开始日期和结束日期,工作日数旁边会显示“日历天数”。在“天数的数法”中可以切换“包含两端”“不含首日”“不含最后一天”“不含两端”,当场对比只算一端和首尾都算的结果。
- 2
几天后、几天前的日期:把“◯个工作日后·前”标签页设为全年无休
在“休息日设置”的预设中选择“全年无休”,所有日子都算作工作日,就会显示按日历的几天后、几天前的日期和星期。天数可输入0〜3000天,也可切换“首日不计入”和“首日计入”。
- 3
距今几天、还有几天:年龄·纪念日计算工具的“纪念日倒计时”标签页
输入日期,就会显示距今的剩余天数(未来日期)或已过天数(过去日期),同时以“几年几个月几天”和约几周的形式显示。100天、1000天等节点的日期也会列出来,可以当倒计时用。
- 4
出生以来的天数:“查询年龄”标签页
输入出生日期和基准日,会显示周岁年龄和“出生以来的天数”。改变基准日,也可以用来以“几年几个月几天”确认任意两个日期之间的期间。
工作日计算工具的结果可以用“复制统计结果”直接粘贴,年龄·纪念日计算工具可以用分享链接把同样的画面发给对方。与对方确认期限时,连同数法的设置一起分享,就不会再为差1天而争执。
常见问题
- 两个日期之间的天数怎么算?
- 用结束日减去开始日。11月1日到11月10日是10 − 1 = 9天,这是与“几天后”相同的只算一端的天数。两端都算的“为期几天”加1为10天,只算中间的天数则减1为8天。跨月时,把中间各月的天数(30天或31天,2月为28天或29天)加起来。
- 只算一端和首尾都算有什么区别?
- 只算一端是只计入开始日或结束日其中之一的数法,“几天后”、已过天数、住宿晚数都属于这种。首尾都算是两天都计入的数法,用于“从某日到某日”“为期几天”和住院天数。同一期间,首尾都算总比只算一端多1天。
- 今天起100天后是哪天?
- 在今天的日期上加100天。100除以7余2,所以星期是今天往后推2天。例如2026年11月1日(周日)的100天后是2027年2月9日(周二)。如果把今天算作第1天,“第100天”就是早1天的99天后。
- “10日内”的期限截至哪天?
- 法律或合同没有特别约定时,按日本民法第140条首日不计入,次日为第1天,期限到第10天结束为止。11月1日收到通知的话,截至11月11日。中国《民法典》第201条也同样规定开始的当日不计入。不过,日本的冷静期等规定把收到当天算作第1天,这时截至11月10日。重要的期限请确认相关规定的数法。
- 可以把1个月当作30天来算吗?
- 期限和合同中的“1个月”按日历上的对应日来数,而不是天数。1月31日的1个月后,因为没有2月31日,是2月的最后一天。按30天算会得到3月2日,差2天。如果只是把天数粗略换算成月数,按每月约30.44天来除即可。
- Excel 中计算两个日期间天数的公式是什么?
- A2 为开始日、B2 为结束日时,=B2-A2 得到只算一端的天数,=B2-A2+1 得到首尾都算的天数。=DATEDIF(A2,B2,"D") 也能得到同样的天数。结果显示为日期时,把单元格格式改为“常规”或“数值”。排除周末和节假日的天数用 =NETWORKDAYS(A2,B2,节假日范围) 计算。
- 怎么知道今天是一年中的第几天?
- 取当月1日的年内天数(平年为1月1、2月32、3月60、4月91、5月121、6月152、7月182、8月213、9月244、10月274、11月305、12月335),再加上“日期 − 1”。10月21日是274 + 20 = 第294天。闰年从3月起的数字都大1。
- 跨闰年时天数会怎样变化?
- 包含2月29日的期间,比平年的同一期间多1天。2028年是闰年,2028年2月1日到3月1日是29天,平年的2027年则是28天。跨过2月29日的1年是366天,星期也会往后推2天。
- 也能计算排除周末和节假日的天数吗?
- 可以。在工作日计算工具的“期间的工作日数”标签页输入开始日期和结束日期,就会在日历天数旁显示排除周末和日本节假日后的工作日数及休息日明细。也可以设置休息的星期和公司自己的假日。Excel 中可以用 =NETWORKDAYS(开始日,结束日,节假日范围) 计算。
本文介绍的工具
相关文章
工作日的数法|“3个工作日后”是哪天?首日不计入与周末节假日的处理
对方说“3个工作日内发货”,具体是几号星期几,其实很难马上说出来。大家都知道要跳过周末,但从当天还是次日开始数、中间的节假日怎么处理,会让答案差1天,跨越长假时甚至差好几天。本文从首日的处理开始整理工作日的数法,让你能用实际日期来确认。
阅读文章 →闰年的判断规则|计算方法与2月29日出生者的年龄算法
闰年常被记成“四年一次”,但仅凭这一点无法解释其中的例外。本文整理判断闰年的3条规则、为什么四年一次还不够,以及2月29日出生的人在平年什么时候长一岁。
阅读文章 →日本的年龄算法|周岁(满年龄)和虚岁的区别与速查表做法
在日本被问到“按虚岁算几岁”时,你是否一时答不上来?日本的年龄有两种算法:日常使用的“满年龄”(相当于周岁),以及传统的“虚岁”。两者只是起算方式不同,但七五三、厄年和祝寿等场合仍以虚岁为准。本文整理了两种算法的区别,以及根据出生日期一次确认两种年龄的方法。
阅读文章 →