使用方法
- 在「习惯名称」填一条要跟踪的习惯(示例:每天喝水 8 杯),按回车或点「添加习惯」。
- 在「连续目标」填周期天数(示例 30 天),完成率按最近 30 天里打卡的天数比例计算。
- 每天完成后点该行的「今日打卡」,按钮变为「已打卡」,连续天数实时加 1。
- 点错可再点一次撤销当天打卡;点「删除」移除整条习惯及其历史记录。
- 点「导出打卡记录 CSV」把全部打卡历史存成带 BOM 的表格文件,清浏览器数据前建议先导出。
习惯记录能解决什么问题
习惯记录解决的是「坚持了多少天说不清」:纸质日历看不出断档,手机 App 要注册账号还要上传行为数据。本页把习惯名和每天的打卡日志写进浏览器自带的 localStorage,打开页面立即看到每条习惯的连续天数,30 天周期内打卡 26 天就是 86.7% 的完成率,全部计算与存储都在本机完成。
它不做提醒——到点推送需要系统能力,请配合喝水提醒或番茄钟计时器使用;也不做长期目标的拆解,那属于目标设定工作表的范围。
原理与规则说明
存储结构。全部数据是一个 JSON 对象,写入 localStorage 键 lq_habit_v1:每条习惯含名称与打卡日志数组,日志元素是形如 20261004 的 8 位日期键(本地时区的年月日,不是时间戳),约 43 字节一条。按 Chrome 每源约 5MB 的配额估算可存 12 万条以上,个人使用远打不到上限。
连续天数算法。连续天数 = 从今天(或昨天,若今天还没打卡)往前逐日回溯、日期键连续存在的天数。以 2026-10-04 为当天:日志里有 09-29 至 10-03 五天、今天未打卡时连续 5 天;今天打卡后变 6 天;若 10-02 断档,往回只能数到 10-03,连续归 1。今天没打卡不清零,是「当天未结束不应惩罚」的口径;跨月用日期差计算,09-30 到 10-03 正确得 3 天。
完成率口径。完成率 = 周期内打卡天数 ÷ 周期天数。30 天周期打卡 26 天即 86.7%。回溯与日期差只依赖 Date 的本地时区,中国大陆无夏令时,日期键不会漂移;若设备时区改动,历史键不变,仅「今天」的判定随之改变。
完整示例(数值仅作演示)
默认示例三条习惯:每天喝水 8 杯(演示连续 5 天)、睡前阅读 20 分钟(演示连续 3 天)、步行 6000 步(演示连续 2 天)。首次打开时若本机没有历史数据,页面自动载入这三条并预填最近几天的日志;点「载入示例」可随时还原。打卡日志中的日期键与正文对照表的口径示例一一对应。
输入范围与对照表
习惯名称 1~20 个字(超出截断报错),每机最多 50 条习惯,连续目标 1~365 天。下表给出常见习惯的建议频率与打卡口径,默认展示 12 行,点「加载更多」展开其余 4 行。
| 习惯 | 建议频率 | 打卡口径示例 |
|---|---|---|
| 每天喝水 8 杯 | 每日 | 当日饮水满 8 杯 |
| 步行 6000 步 | 每日 | 手机计步不低于 6000 |
| 睡前阅读 20 分钟 | 每日 | 当日累计满 20 分钟 |
| 早睡 23:30 前 | 每日 | 当晚 23:30 前上床 |
| 每周跑步 3 次 | 每周 3 次 | 单次 2 公里以上记 1 次 |
| 力量训练 30 分钟 | 每周 3 次 | 完成当日计划动作组 |
| 写 200 字日记 | 每日 | 当日写满 200 字 |
| 背 20 个单词 | 每日 | 完成一组 20 词 |
| 不喝含糖饮料 | 每日 | 全天 0 次 |
| 冥想 10 分钟 | 每日 | 计时满 10 分钟 |
| 复盘当日开支 | 每日 | 当日账目录入完成 |
| 拉伸 10 分钟 | 工作日 | 下班后计时满 10 分钟 |
| 整理房间 | 每周 1 次 | 完成一次全屋收拾 |
| 学一节网课 | 每日 | 看完一节 25 分钟课程 |
| 储蓄月收入 20% | 每月 | 发薪日转入储蓄账户 |
| 户外活动 1 小时 | 每周末 | 周末累计满 1 小时 |
输入范围、边界与精度说明
输入校验。习惯名称为空、超过 20 字、与已有习惯重名,分别给出指出字段与上限的中文报错;习惯数量达到 50 条上限时拒绝添加(防止列表长到难以操作)。所有非法路径都在结果区显示具体文案,不会静默丢弃。
存储边界。localStorage 在隐私模式、存储配额满或用户禁用时会抛异常,页面捕获后提示「记录无法保存」而不是假装成功;清除浏览器数据会连带删掉打卡历史,导出的 CSV 是唯一的异地备份途径。同一浏览器的多个标签页共享同一份数据,最后写入者覆盖。
隐私边界。数据不落服务器:页面没有后端提交逻辑,可在开发者工具 Network 面板确认除页面资源外无任何请求;换设备或换浏览器数据不跟随,这是纯本地存储的代价,也是隐私的来源。
常见问题
习惯记录的数据存在哪里,会上传吗?
存在浏览器本机的 localStorage(键 lq_habit_v1),不上传服务器。换浏览器、换设备或清除站点数据后记录不会出现,删除前请先导出 CSV。
今天还没打卡,连续天数会清零吗?
不会。算法从昨天开始回溯,今天打卡后并入连续;只有昨日之前的断档才会让连续天数重新从最近一次打卡算起。
连续天数和完成率有什么区别?
连续天数衡量不间断的势头,断一天就归位重算;完成率衡量周期内的总量达成,30 天打卡 26 天是 86.7%,中间断档不归零。两者一严一松,配合看更合理。
跨月、跨年连续会算错吗?
不会。日期键是年月日字符串,回溯按公历逐日递减,09-30 到 10-03 的日期差实算为 3 天,跨月跨年都正确;中国大陆无夏令时,不存在时钟回拨导致的重复键。
隐私模式或无痕窗口里能用吗?
能打开也能打卡,但 localStorage 可能被禁用或随窗口关闭清空,页面会提示记录无法保存。长期跟踪请用普通窗口。
最多能记多少条习惯、多少天?
页面限制 50 条习惯;日志按每天每条约 43 字节估算,浏览器 5MB 配额可存十几万条,正常使用不会触顶。
导出的 CSV 打开是乱码怎么办?
本页导出已带 BOM(\ufeff),Excel 直接打开中文正常;若你用其他工具导出后乱码,多半是文件缺 BOM,用「UTF-8 with BOM」重新保存即可。
两条习惯可以同名吗?
不可以,重名会被拒绝并提示已存在。同名会导致日志归属混乱,想区分场景可在名称里带上时段,例如「晨间阅读 20 分钟」。