恋爱天数计算器
填上在一起的那天,实时累计已走过的 X 年 X 个月 X 天、总天数与总秒数,并自动算出下一个整百天、整千天与周年纪念日的具体日期和倒计时,纪念日、生日、项目工期都适用。
「我们在一起多少天了?」——这个问题按秒算每天都在变。本工具从你填的起始日开始实时累计:满 X 年 X 个月 X 天的日历差、总天数、折合周数、总小时与总秒数(结束日期留空时按今天计,页面每秒刷新)。整百天、整千天与周年纪念日不用自己数:下一个第 N 天的日期和还差几天直接列在表里,提前安排惊喜刚刚好。
日历差按月推进:先数整年、再数整月、余下的是天,月末溢出按当月最后一天截断——1 月 31 日加 1 个月记为 2 月 28 日;2 月 29 日在一起的话,平年在 2 月 28 日满周年。日期填反了会自动交换并提示,结束日期填未来某天就是倒计时模式,算项目工期、宝宝预产期同样顺手。
这个工具解决你的问题了吗?
提交后会把工具名、你的输入与当前结果发送到服务器;请勿填写身份证号、手机号等隐私信息。
AI 助手 会结合你当前的输入与结果回答
追问会再次把当前输入与结果发送到服务器;请勿填写隐私信息。
使用步骤
- 填起始日期:在一起的那天、出生日或项目开始日。
- 结束日期留空默认统计到今天,也可以填未来日期做倒计时。
- 看累计:X 年 X 个月 X 天、总天数、总秒数实时更新。
- 看里程碑:下一个整百天、整千天与周年纪念日的日期和倒计时。
计算原理与示例
自然日口径与实时刷新
天数按自然日计算:起始日 0 点到结束日 0 点之间隔了几个自然日,就是总天数。用「UTC 中午法」取日期(把本地日期固定在当天中午再相减),避免了夏令时切换日 23 小时/25 小时造成的 ±1 天毛刺。结束日期留空时统计到今天,页面每秒刷新,总秒数实时走动;填具体日期就是固定区间统计。
月推进与月末截断
「X 年 X 个月 X 天」的日历差按月推进:先用年月差估计总月数,把起始日加上这些个月(月末溢出按当月最后一天截断,1 月 31 日加 1 个月是 2 月 28 日),如果超过了结束日就退一个月,剩余的自然日就是天数。2 月 29 日在一起的,平年在 2 月 28 日满周年——这是主流日历库(date-fns、moment)一致的口径。
里程碑与周年纪念日
里程碑以起始日为原点:下一个整百天、整千天是「第 N 天」对应的自然日,周年纪念日按上面的月推进规则算。表里同时给出目标日期和还差几天;如果今天恰好是周年当天,会显示「今天正好满 X 周年」。倒计时模式直接把结束日期填成未来某天即可,日期填反了会自动交换。
代码示例
JavaScript 按 UTC 归一化再相减(避开夏令时)
// 直接 (d2 - d1) / 86400000 在有夏令时的时区会得到 23 或 25 小时,算出小数天
const dayDiff = (a, b) => {
const toUTC = (d) => Date.UTC(d.getFullYear(), d.getMonth(), d.getDate());
return Math.round((toUTC(b) - toUTC(a)) / 86400000);
};
dayDiff(new Date('2026-01-01'), new Date('2026-03-01')); // 59
// 加 N 天同理:用 Date.UTC 构造再取回本地年月日,跨月跨年自动进位
function addDays(date, n) {
const t = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate() + n);
const d = new Date(t);
return [d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate()];
}
addDays(new Date('2026-02-27'), 1); // [2026, 2, 28]
Shell 命令行算天数差
# Linux(GNU date):转成秒再相减
a=$(date -d 2026-01-01 +%s)
b=$(date -d 2026-03-01 +%s)
echo $(( (b - a) / 86400 ))
# macOS(BSD date):-j -f 指定输入格式
a=$(date -j -f %Y-%m-%d 2026-01-01 +%s)
b=$(date -j -f %Y-%m-%d 2026-03-01 +%s)
echo $(( (b - a) / 86400 ))
# 今天往后 30 天是哪天
date -d "+30 days" +%F # Linux
date -v+30d +%F # macOS
常见问题
「X 年 X 个月 X 天」是怎么算的?
按日历推进:先数满几年,再数满几个月,剩下的零头是天数。月末溢出按当月最后一天截断,比如 1 月 31 日加 1 个月记为 2 月 28 日,所以结果是 1 个月 1 天而不是负数。
2 月 29 日在一起的怎么算周年?
平年没有 2 月 29 日,按月末截断口径在 2 月 28 日满周年(2020-02-29 的 1 周年是 2021-02-28)。整年天数仍按真实自然日计,闰年会多一天。
第 100 天是哪天?在一起当天算不算?
在一起当天是第 0 天,第 100 天是起始日 + 100 天的自然日。里程碑表会直接给出那天的日期和还差几天,不用自己数。
结束日期留空是什么意思?
留空表示统计到今天,页面每秒刷新一次,总秒数是实时走动的;填上具体日期则统计到那天为止,适合算某段固定区间的天数。
日期填反了会怎么样?
工具会自动把较早的日期当作起点并显示「已自动交换」提示,统计结果不受影响——不用删掉重填。
总秒数是实时走动的吗?
结束日期留空时是——页面每秒刷新一次,当天 0 点到现在已走过的秒数会不停增加;填了具体结束日期后所有数字都是固定值。
日期数据会上传吗?
不会。日期计算完全在本机浏览器里完成,不上传、不保存;页面上的计算历史仅存本机浏览器,可随时清空,无痕模式关闭即消失。
延伸阅读
来自本站原创文章,讲清这个工具背后的算法与口径。