使用方法
- 「起床小时」填 7、「起床分钟」填 0,二十四小时制。要填的起床时刻就在当天,跨不跨零点由页面自动判断。
- 「入睡潜伏期」填 15 分钟:这是躺下到真正睡着的间隔,成年人通常在 10~20 分钟。躺下就着的人可以填 5,翻来覆去半小时的填 30。
- 「每周期时长」填 90 分钟,这是本页的默认值,也是睡眠周期的常用取值;把它改成你觉得更准的数值只会影响倒推结果,不会动到其它两个参数。
- 「期望周期数」填 5。五档对应 7.5 小时,四档 6.0 小时、六档 9.0 小时,页面上同时列出相邻两档,方便你选。
- 在任意一个输入框按 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 个周期。逐项结果是:
- 起床分钟数
7 × 60 + 0 = 420,在床分钟数15 + 5 × 90 = 465; - 上床时刻
(420 − 465) = −45,加 1440 得1395,即 23:15,页面标注「前一天晚上」; - 纯睡眠 450 分钟 = 7.5 小时,在床 465 分钟 = 7.8 小时,两者相差的 15 分钟就是潜伏期;
- 达标判定:450 分钟 ≥ 420 且 ≤ 540 → 达标;
- 改成 6 档:在床 555 分钟,上床 21:45,睡 9.0 小时;改成 4 档:在床 375 分钟,上床 00:45,睡 6.0 小时,低于 7 小时下限;
- 只把潜伏期改成 20 分钟:在床 470 分钟,上床时刻提前到 23:10。
把第 2 行和第 3 行一起看就明白本页在做什么:用加上潜伏期的总时长去对齐起床时刻,所以周期没有半档这件事,在用了整数周期之后就自然成立了。
输入范围与对照表
下表固定五档周期(7.5 小时)、潜伏期 15 分钟,只把起床时刻从 04:30 一路挪到 12:30,看上床时刻怎么跟着走。默认显示 12 行。
| 起床时刻 | 建议上床时刻 | 上床属于 | 在床时长(小时) | 纯睡眠(小时) | 7~9 小时区间 |
|---|---|---|---|---|---|
| 04:30 | 20:45 | 前一天晚上 | 7.8 | 7.5 | 达标 |
| 05:00 | 21:15 | 前一天晚上 | 7.8 | 7.5 | 达标 |
| 05:30 | 21:45 | 前一天晚上 | 7.8 | 7.5 | 达标 |
| 06:00 | 22:15 | 前一天晚上 | 7.8 | 7.5 | 达标 |
| 06:30 | 22:45 | 前一天晚上 | 7.8 | 7.5 | 达标 |
| 07:00 | 23:15 | 前一天晚上 | 7.8 | 7.5 | 达标 |
| 07:30 | 23:45 | 前一天晚上 | 7.8 | 7.5 | 达标 |
| 08:00 | 00:15 | 当天凌晨 | 7.8 | 7.5 | 达标 |
| 08:30 | 00:45 | 当天凌晨 | 7.8 | 7.5 | 达标 |
| 09:00 | 01:15 | 当天凌晨 | 7.8 | 7.5 | 达标 |
| 09:30 | 01:45 | 当天凌晨 | 7.8 | 7.5 | 达标 |
| 10:00 | 02:15 | 当天凌晨 | 7.8 | 7.5 | 达标 |
注意 07:30 到 08:00 之间的翻转:前者上床时刻落在前一天晚上,后者落在当天凌晨。这个「属不属于同一天」由取模结果判断,不是靠肉眼。
| 周期数 | 上床时刻 | 纯睡眠(小时) | 在床(小时) | 7~9 小时区间 | 上床属于 |
|---|---|---|---|---|---|
| 3 | 02:15 | 4.5 | 4.8 | 不足或超出 | 当天 |
| 4 | 00:45 | 6.0 | 6.3 | 不足或超出 | 当天 |
| 5 | 23:15 | 7.5 | 7.8 | 落在 7~9 小时 | 前一天 |
| 6 | 21:45 | 9.0 | 9.3 | 落在 7~9 小时 | 前一天 |
| 7 | 20:15 | 10.5 | 10.8 | 不足或超出 | 前一天 |
这张小表说明了 5 与 6 是这张表上唯二达标的档位:3、4 档睡不够 7 小时,7 档超过 9 小时。
结果边界与舍入说明
- 全程用整数分钟做算术,不碰 Date 对象。一旦使用
new Date(),本地时区与夏令时会把「23:15」偷偷挪走一小时;本页面只做分钟加減与取模,同一串输入在任何时区得到同一个时刻。 - 分钟向下取整到整数,不显示秒。周期时长与潜伏期都以分钟为单位输入,输出时刻也不会出现秒;090 min 与 90.0 min 在页面上是同一个值。
- 小数 тоже 会被如实处理。周期时长填 87.5 分钟时,五档是 452.5 分钟,输出的上床时刻仍然取整到分钟(小数部分舍掉前一分钟的那一侧),并在潜伏期小于 1 分钟的极端组合下提示把潜伏期填成整数。
- 周期数必须是正整数。填 0 或负数没有「零档睡眠」这种东西,会直接报错;填 5.5 这类小数会让「落在整周期醒来」这个前提失效。
- 超过一天的组合会被拦下。周期数 15 个以内(15 × 90 + 15 = 1365 分钟)仍在一日之内;填 16 个(1455 分钟)页面报错并说明上限,不会返回一个「前天」的时刻。
- 低于 7 小时时不改 BUSINESS 口径。四档 6.0 小时会如实标注「未达标」,页面不会为了凑出达标结果自动把周期数加一。
- 潜伏期为 0 是合法的。儿童或极度疲劳时躺下即睡着属于这种情况,0 时「在床时长」等于「纯睡眠时长」,两者在结果区显示成同一个数字属正常。
常见问题
我躺下就睡着,潜伏期还要填吗?
若是真的躺下即睡着,填 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 面板自查。