睡眠时间计算器

先定你要几点起床,它按「一个睡眠周期九十分钟」往回数,再加上你躺下到真正睡着的那十几分钟,给出该几点躺下的准确时刻;顺带告诉你这一觉的纯睡眠时长有多少、落在七到九小时的建议区间里哪一档。

提示:五个输入框里按 Enter 立即重算;下方对照表默认 12 行,点「加载更多」继续展开,也能导出带 BOM 的 CSV 或复制成 TSV 贴进表格。

使用方法

  1. 「起床小时」填 7、「起床分钟」填 0,二十四小时制。要填的起床时刻就在当天,跨不跨零点由页面自动判断。
  2. 「入睡潜伏期」填 15 分钟:这是躺下到真正睡着的间隔,成年人通常在 10~20 分钟。躺下就着的人可以填 5,翻来覆去半小时的填 30。
  3. 「每周期时长」填 90 分钟,这是本页的默认值,也是睡眠周期的常用取值;把它改成你觉得更准的数值只会影响倒推结果,不会动到其它两个参数。
  4. 「期望周期数」填 5。五档对应 7.5 小时,四档 6.0 小时、六档 9.0 小时,页面上同时列出相邻两档,方便你选。
  5. 在任意一个输入框按 Enter 重算,结果区立刻给出上床时刻、在床时长和纯睡眠时长三件事。

睡眠时间计算器能解决什么问题

第一件事是把「早点睡」变成具体到分钟的那一刻。设定 07:00 起床、五档周期、15 分钟潜伏期,页面给出 23:15 上床——没有留给你打半局游戏的余地。很多人真正需要的不是提醒,而是这个精确到刻度的数字。

第二件事是解释那十五分钟去哪了。五档周期是 450 分钟,若直接 23:30 躺下就恰好卡在起床前 7.5 小时,因为睡眠是从睡着开始算,不是从上床开始算。页面把「在床 7.8 小时」与「纯睡 7.5 小时」分开展示,差的 15 分钟就是潜伏期。

第三件事是让你在整周期的整数点上醒来。五档结束后正好在 07:00 醒来;若改成四档半(7 小时)起床时刻不变,醒来时就会落在周期中间的那个偏深阶段,起身更费劲。页面只输出整数档,就是为了避开这种半档情况。

第四件事是给出相邻两档供取舍。同一组中:六档要在 21:45 上床、睡 9.0 小时;五档 23:15、睡 7.5 小时;四档 00:45、睡 6.0 小时。前两档落在成人建议的 7~9 小时区间里,四档已经低于建议下限,页面会直接标注「未达标」而不是让你自己算。

本页不做这些事:不评估失眠与睡眠质量、不统计深睡浅睡占比、不做任何医疗建议。长期睡不着或白天嗜睡请去医院睡眠门诊;要算一周累积缺觉的量,请看「睡眠负债计算器」相关工具里的同题材页面。

原理与变量说明

核心只有一式:bed = ((wake − span) % 1440 + 1440) % 1440,其中 wake = 小时 × 60 + 分钟、span = 潜伏期 + 周期数 × 每周期时长。为什么要在百分号外面再加一个 1440 再取一次模:JavaScript 的 % 对负数返回负值,(420 − 465) % 1440 得到的是 −45;先加 1440 变成 1395 再取模,才是真正的 23:15。写一次百分号就会把跨零点的结果算到负时钟上。

90 分钟这个值是哪来的:出自 Nathaniel Kleitman 提出的「基本休息—活动周期」(BRAC),人的夜间睡眠由非快速眼动期与快速眼动期交替组成,一轮约 90 分钟。允许把它改成 60~120 分钟是因为个体差异确实存在;但不能改成 45 或 200——前者会把整晚切碎到失去意义,后者一晚上最多塞进三档,无法再对齐常见起床时刻。

遵循的建议区间:美国国家睡眠基金会(NSF)给出的成年人(18~64 岁)推荐时长是每晚 7~9 小时,美国睡眠医学会(AASM)同样建议成年人不少于 7 小时。本页按这条线判断达标:小于 7 小时(不足 420 分钟)或大于 9 小时(超过 540 分钟)都标注「未达标」。

输入怎样变成输出:小时与分钟合并成起床分钟数;周期数与周期时长相乘,再加上潜伏期得到在床分钟数;两者相减后取模得到上床时刻的分钟数,最后整除 60 得到小时、余数为分钟。纯睡眠时长只算 周期数 × 周期时长,潜伏期不计入。

边界在哪:小时 0~23、分钟 0~59、潜伏期 0~120 分钟、周期时长 60~120 分钟、周期数 1~15。最后一档之上会被拦下:16 × 90 + 15 = 1455 分钟已经超过一天 1440 分钟,倒推回来会同落在前天,所以 15 个周期是上限(15 × 90 + 15 = 1365 分钟,仍在一天内)。

最常解释错的一点:输出的是「上床时刻」,不是「你会在这一刻睡着」。它保证的是醒来的那一刻正好落在某个周期结束处,睡着的时刻要再往后推一个潜伏期。

完整示例(数值仅作演示)

示例条件就是本页睡眠时间计算器的默认值:起床 07:00、潜伏期 15 分钟、每周期 90 分钟、期望 5 个周期。逐项结果是:

把第 2 行和第 3 行一起看就明白本页在做什么:用加上潜伏期的总时长去对齐起床时刻,所以周期没有半档这件事,在用了整数周期之后就自然成立了。

输入范围与对照表

下表固定五档周期(7.5 小时)、潜伏期 15 分钟,只把起床时刻从 04:30 一路挪到 12:30,看上床时刻怎么跟着走。默认显示 12 行。

起床时刻建议上床时刻上床属于在床时长(小时)纯睡眠(小时)7~9 小时区间
04:3020:45前一天晚上7.87.5达标
05:0021:15前一天晚上7.87.5达标
05:3021:45前一天晚上7.87.5达标
06:0022:15前一天晚上7.87.5达标
06:3022:45前一天晚上7.87.5达标
07:0023:15前一天晚上7.87.5达标
07:3023:45前一天晚上7.87.5达标
08:0000:15当天凌晨7.87.5达标
08:3000:45当天凌晨7.87.5达标
09:0001:15当天凌晨7.87.5达标
09:3001:45当天凌晨7.87.5达标
10:0002:15当天凌晨7.87.5达标

注意 07:30 到 08:00 之间的翻转:前者上床时刻落在前一天晚上,后者落在当天凌晨。这个「属不属于同一天」由取模结果判断,不是靠肉眼。

周期数上床时刻纯睡眠(小时)在床(小时)7~9 小时区间上床属于
302:154.54.8不足或超出当天
400:456.06.3不足或超出当天
523:157.57.8落在 7~9 小时前一天
621:459.09.3落在 7~9 小时前一天
720:1510.510.8不足或超出前一天

这张小表说明了 5 与 6 是这张表上唯二达标的档位:3、4 档睡不够 7 小时,7 档超过 9 小时。

结果边界与舍入说明

常见问题

我躺下就睡着,潜伏期还要填吗?

若是真的躺下即睡着,填 0 即可,此时在床时长等于纯睡眠时长。多数人建议保留 10~20 分钟:示例里把 15 改成 20,上床时刻就从 23:15 提前到 23:10,只有五分钟的差别,但它是「会不会踩线赶时间」的关键五分钟。

九十分钟是怎么定的,我能改吗?

90 分钟来自 Kleitman 的基本休息—活动周期(BRAC),即一夜里非快速眼动期与快速眼动期交替的那一轮。可以改,页面允许 60~120 分钟;改成 100 分钟时五档就是 500 分钟(8.3 小时),上床时刻相应提前。但别改成 45 或 200,前一种会把整晚切碎,后一种一天塞不下几轮。

为什么算出来的是 23:15 而不是 23:30?

因为 demanda 对齐的是「醒来落在周期结束处」,而上床之后还要花 15 分钟才睡着。450 分钟的睡眠加上 15 分钟潜伏期是 465 分钟,倒推 7:45 小时就是 23:15。少算这一步,实际睡着时刻会推迟到 23:45,起床时你就差了那一档次。

起床时刻填第二天凌晨可以吗?

可以,这是设计内的用法。填 00:30 起床、五档 15 分钟潜伏期,页面给出上床 16:45 并标注「前一天」,意思是前一天下午或傍晚的 16:45——夜班作息常用的场景。

为什么有时说达标有时不说?

判定线是纯睡眠时长是否落在 420~540 分钟(7~9 小时),这是 NSF 对 18~64 岁成年人的推荐区间。六档 9.0 小时刚好落在上限上,七档 10.5 小时超过上限,即使你对较长睡眠有偏好,页面也照样标为未达标,因为它是按这条公开建议自动判断的。

能算午睡或者一段补觉吗?

可以,把周期数填成 1(90 分钟)或把每周期时长改成 60 分钟填 1 档,就是一个小时的那一觉。注意保证中文「分摊」逻辑:午睡不适用 7~9 小时那条线,达标字段对短时段没有意义,看的就是最后的上床时刻。

页面能不能分深睡、浅睡和做梦?

不能。本页只按平均周期长度做算术,不涉及任何睡眠分期;深睡比例、觉醒次数这类指标需要多导睡眠监测或手环的原始记录,不是从起床时刻能推出来的。

输入的内容会被上传或记录吗?

不会。五个数(起床时刻、潜伏期、周期时长、周期数)全部在浏览器本地完成算术,只用整数加減与取模,不调用任何网络接口,也不写进本地存储;可以在开发者工具的 Network 面板自查。

相关工具