第二时钟
你的药,开封后还能用多久
药盒上印着的是第一个时钟;药品开封后重新开始的倒计时,是第二个时钟。
使用手册
出品人:inoichi
一、作品简介
一句话:把「开封那天起还能用多久」算清楚。每次你打开这个页面时,卡片会按剩余天数变色、到期的顶上红色横幅;它不会在页面关着的时候给你发通知。
「第二时钟」这个名字
每一盒药身上其实有两个时钟。
- 第一个时钟:药盒上印刷的有效期。它从出厂就开始走,谁都看得见。
- 第二个时钟:开封(首次启用)那一刻重新起算的那个期限。它没有印在任何地方,一旦拆封就开始倒数,而且经常比第一个时钟先走完。
眼药水拆封 28 天、混悬液配好 14 天、碘伏棉签开罐 7 天、75% 酒精倒出使用 1 个月——这些数字只写在说明书里,看完就忘。本作品做的就是把这块看不见的表盘显示出来,所以叫「第二时钟」。
解决的真实问题
- 药盒上写着 2027 年过期,开封后的期限却可能早就到了。这两个日期是两回事,而只有前一个印在盒子上——后一个很容易被忽略。
- 说明书里的天数记不住、也不好查。应用内置 1832 条常见药品开封效期数据 + 23 条剂型通用规则,打出药名就自动填好天数,不用翻纸片。
- 没人会主动去数日子。卡片按剩余天数排序,绿 / 黄 / 红三档一眼可辨;一旦有药到期,页面顶部直接压一条红色横幅。
想知道它是怎么做出来的?
我们另写了一份 开发过程报告, 记的不是功能怎么实现,而是这个应用在哪些地方差点给出错的答案—— 七条缺陷逐条摊开,包括作者自己用正则批量改医疗数据、19 条里改错 12 条的那次。
如果你正在犹豫要不要相信一个 AI 写的健康类工具,那份报告比这份手册更值得看。
二、功能详解
2.1 两个时钟与颜色档
每张卡片同时跑两个时钟,谁先到期就听谁的:
- 印刷有效期——盒子上印的那个日期(可留空)。
- 开封后可用天数 + 首次启用日期——两者都填齐,才会算出「开封截止日期」。
卡片上的 实际停用日期 取两者中较早的一个,并注明停用原因,文案只有两种:「停用原因:因印刷有效期到期」或「停用原因:因开封后有效期到期」。颜色按这个较早的剩余天数判定:
| 剩余天数 | 颜色档 | 卡片文案 |
|---|---|---|
| 8 天及以上 | 绿 | 剩余 N 天 |
| 4 – 7 天 | 黄 | 剩余 N 天 |
| 1 – 3 天 | 红 | 剩余 N 天 |
| 正好 0 天 | 红 | 今天到期,请停止使用 |
| 已超过 | 红 | 已过期 N 天 + 「已超过开封后有效期,请停止使用」或「已超过包装上的有效期,请停止使用」 |
只要药箱里存在剩余天数 ≤ 0 的药,页面顶端就会出现红色横幅,把这些药名连起来写——正好到期的写「××今天到期,请停止使用」,已经超过的写「××已过期,请停止使用」。
2.2 添加产品:两个入口
「添加产品」面板上有两个页签:拍照识别 与 手动填写,默认停在手动填写。两边内容都在,切换时若已有草稿或已选照片,会弹一个确认框(文案为「切换后将保留图片,但不再使用AI识别。」/「切换后将保留已填写内容。」),不会静默丢弃你填的东西。
手动填写的字段
- 产品名称(必填,也是药库匹配的钥匙)
- 使用人(见 2.6)
- 产品类别、规格
- 印刷有效期(日期选择)
- 首次启用日期:三个按钮 尚未启用 / 今天启用(默认) / 选择日期
- 开封后可用天数
- 更多信息 折叠区:品牌、剂型、储存说明、规则来源、备注
校验规则(实际生效的三条):产品名称不能为空;印刷有效期与开封后可用天数至少填一项;选「选择日期」时该日期不能晚于当前(模拟)日期。此外,若药箱里已有同名且尚未到停用日期的药,保存时会先问一句「药箱里已有「XX」,仍要再添加一条吗?」。
2.3 拍照识别与「两个模型交叉验证」
点 拍照识别 选 1–4 张药盒照片,AI 会读出产品名称、商品名、规格、剂型与包装上印的有效期。这一步需要联网。
识别结果里会出现一条徽章,三种情形:
| 徽章 | 含义 | 应用会做什么 |
|---|---|---|
| 一致 | 两个模型读出完全相同的药名 | 正常按内置药库预填开封天数 |
| 不一致 | 两家读出的药名有任何差别(哪怕只差剂型或「复方」二字),会把两个答案都列给你看 | 不预填任何天数、不带出储存条件、不给联网查询入口,请你以包装为准 |
| 仅一个模型 | 另一个模型没返回(超时或限流) | 照常显示,但提示缺少交叉核对 |
2.4 内置药库预填(离线可用)
在 产品名称 里打字,停手约 0.4 秒(或失焦)就会去查内置药库,命中后自动填 开封后可用天数、储存说明、规则来源三个字段。药库共 1832 条家庭药箱相关条目(含药品、消毒用品与部分健康用品),配有常见商品名/别名(例如打「美林」能命中「布洛芬混悬液」)与 23 条剂型参考规则(如「滴剂 28 天」)。匹配结果分四种,提示语各不相同:
| 匹配情况 | 提示语 | 是否自动填 |
|---|---|---|
| 药名精确命中 | 📚 已按内置药库预填 | 是 |
| 近似命中 | 📚 已按内置药库近似匹配预填(药名未完全一致,请核对) | 是 |
| 只命中剂型规则 | 📚 已按内置剂型规则预填 | 是 |
| 同一个名字下有多个剂型 | ⚠️ 这个名字下有多个剂型(……),开封后能用多久不一样,所以没有替你填。看一眼药盒上的完整名称,最后几个字是哪种剂型,就在下面点哪个。 —— 并就地出现一排剂型按钮 | 否,直到你选定剂型 |
| 命中多个期限不一致的条目 | ⚠️ 药库中有多个条目含该名称(……),开封期限不一致,未自动预填;请补全完整通用名(含剂型)或联网查询 | 否(宁可不填,也不猜) |
| 完全没收录 | 🔍 内置药库未收录「XX」,可点下方按钮联网查询开封效期 | 否 |
关于「剂型」这个字段:平时选填,撞上同名多剂型时变必填。
一个商品名常常同时覆盖好几个剂型,而它们的开封期限可以差得很远。例如 希刻劳 既是头孢克洛干混悬剂(加水冲配后需冷藏,14 天内用完),也是头孢克洛胶囊 (按外盒印刷效期,常温存放)。泰诺林、可乐必妥、 兰美抒 等也是同样情况,全库共 27 处。
遇到这种情况,应用不会替你猜一个——它会在提示下面列出所有候选剂型的按钮, 你照着药盒上印的剂型点一下就行。点完之后天数与储存条件才会填进来, 同时「更多信息」会自动展开,让你看见剂型字段确实被写进去了。 也可以直接在「更多信息 → 剂型」里手打,效果一样。
为什么做成让你点剂型、而不是让你「补全完整通用名」:剂型就印在药盒上, 照抄一眼的事;而「完整通用名」你要是知道,一开始就不会打商品名了。
- 你亲手改过的开封天数不会被覆盖。只要你在 开封后可用天数 里输入过内容,该字段小字会变成「已手动修改」,此后药库预填不再动它。
- 但由药库自动填进去的值,会随药名改动被清空并重新计算。这是有意为之:药名从 A 改成 B 之后,还留着 A 的天数会更危险。所以「填完就此永远不再变动」的说法并不成立,请以字段下方那行小字(「已根据产品规则填写,可修改」/「已手动修改」)为准。
- 储存说明、规则来源同理:自动填的会随药名重算,你自己写过的不会被动。
2.5 联网查询开封效期
当药库没收录、判为歧义、或只命中剂型规则时,产品名称下方会出现 🔍 联网查询开封效期 按钮(药库精确/近似命中时该按钮不出现,因为没必要花这一次请求)。点击后会把药名发给第三方 AI 服务检索并提炼,回填天数与储存条件,提示语以「🌐 联网查询结果,以说明书为准」开头。
- 查询结果会在这台设备上保留 30 天(最多 200 条),重复查同一个药名会直接命中缓存并标注「(本地缓存结果,未重复计费)」。
- 同一药名有 8 秒冷却;不同药名互不影响,可以连着查。
- 单次会话最多 20 次联网查询,超出后提示改为手动填写。
- 查不到或查询失败时提示「请以药盒说明书为准,或咨询药师/厂家——查不到不等于没有期限」,不会自动填入天数,也不会改动你已填好的字段。
2.6 按家人分类
手动表单里有一个 使用人 下拉框,预置选项为:未指定 / 爸爸 / 妈妈 / 爷爷 / 奶奶 / 我自己 / 其他…。选「其他…」会出现一个输入框,可自己写(占位提示「填写使用人(可留空)」)。它的实际作用只有两处:
- 填了使用人的卡片,右上角显示一枚姓名徽章。
- 只要药箱里至少有一条记录填了使用人,药品卡片列表顶部就会出现一排筛选按钮:全部 加上各个使用人名字,点一下即可只看某个人的药。该人名下没有药时显示「这位成员名下暂无药品」。
2.7 药品卡片上能做的事
- 排序:按剩余天数从少到多自动排,最先到期的排最上面。
- 标记开封:填了开封天数但还没启用的卡片,右侧有 标记开封 按钮,点一下把首次启用日期设为当前日期,倒计时立即开始。
- 无需开封计时:药库中有一部分条目本来就没有开封天数(例如铝塑板独立密封的片剂、独立铝箔袋颗粒剂——拆开当次用完,整盒按外盒效期)。这类记录的卡片右侧显示灰字「无需开封计时」,只跑印刷有效期这一个时钟。
- 照片:拍照识别入库的卡片带缩略图,点击可看大图;手动录入的显示 💊 占位。
- 编辑 / 删除:卡片右上角 ··· 展开菜单。删除会二次确认:「确定删除“XX”吗?删除后无法恢复。」
- 冷藏提示:储存说明以「冷藏」开头的卡片会多一行「❄️ 离开冷藏环境请尽快使用」。
2.8 模拟时间推移
页面下方 ⏱ 模拟时间推移(应用里的原文是「把日期往后拨,提前看看哪些药会到期」) 可展开,内含:当前模拟日期显示、+1天 +7天 +20天 +30天 恢复今天 五个按钮,以及一个自定义日期输入框配 应用日期。
模拟日期只在当前页面有效,刷新后会自动回到真实今天;处于模拟状态时页面最顶端有一条黄色横条说明这一点,点它也可以立刻恢复。药品记录不受影响,照常保留。
三、上手走一遍
上面讲了这些功能各是什么,这一节把它们串成一条路走一遍。最短的一遍:在「产品名称」输入 红霉素眼膏 → 点「确认添加」→ 展开页面最下方「⏱ 模拟时间推移」,连点 +20天 → +1天 → +7天,卡片会依次由绿转黄转红,顶部弹出红色提示。就这三下。
下面是逐步版(约 90 秒),每一步会看到什么都写明了。
路径 A · 手动路径(离线可跑,推荐先看这条)
- 打开应用,向下找到 添加产品 区域,它默认就停在 手动填写 页签,无需切换。
- 在 产品名称 里输入 红霉素眼膏,稍等片刻(或点一下输入框外面)。 输入框下方会出现提示:「📚 已按内置药库预填:开封后可用 28 天,储存 阴凉 · 眼用制剂启用后最多使用4周(《中国药典》对眼用制剂的通用规定)」。开封后可用天数 自动变成 28,下方小字写「已根据产品规则填写,可修改」。
- 首次启用日期 保持默认的 今天启用,直接点最下方 确认添加。 上方的药品卡片区域立刻出现一张绿色卡片:当前剩余天数「剩余28天」,并列出「开封截止日期」与「实际停用日期」。
- 展开页面下方的 ⏱ 模拟时间推移 面板,依次点:+20天 → +1天 → +7天。 三次点击后的卡片状态见下表。
- 看完后点 恢复今天(或点顶部黄条上的「点此恢复今天」)即可回到真实日期。
| 操作 | 剩余天数 | 卡片颜色 | 你会看到 |
|---|---|---|---|
| 刚添加 | 28 天 | 绿 | 「剩余28天」 |
| 点 +20天 | 8 天 | 绿 | 「剩余8天」,仍在绿档(绿档判据是 >7 天) |
| 再点 +1天 | 7 天 | 黄 | 「剩余7天」,卡片转黄——这一下正好压上 7 天黄线 |
| 再点 +7天 | 0 天 | 红 | 卡片写「今天到期,请停止使用」;页面顶部弹出红色横幅「红霉素眼膏今天到期,请停止使用」 |
怎么知道自己在不在模拟日期:只要快进过,页面最上方就会常驻一条黄色提示条「⏱ 当前处于模拟日期 YYYY-MM-DD(非真实日期),点此恢复今天」,点一下即可回到今天。刷新页面也会自动回到真实日期,所以不必担心把模拟状态留给下一个人。
路径 B · 拍照路径(需要网络)
这条路径会把照片发给第三方 AI 服务做识别,请在有网络时体验;离线时应用会提示改用手动填写。
- 点 拍照识别 页签,再点 📷 拍照或选择图片。 提示语原文:「可上传1—4张,建议至少包含一张有效期特写」。一次最多取前 4 张。
- 选好图后进入「图片预览」,确认无误点 开始识别。 识别中显示「正在识别产品……」,旁边有 取消识别 可随时中断。
- 识别完成后出现「识别结果」列表,逐条列出产品名称 / 产品类别 / 规格 / 印刷有效期 / 识别依据。 若有效期没拍清楚,该条会就地给出一个日期输入框让你人工核对,或选择 暂不填写。
- 每条结果各带两个按钮:确认并添加 直接入库;修改信息 把该条内容灌进手动表单再改。 结果区底部还有 重新识别 与 切换为手动填写。
入库之后,颜色档与模拟时间推移的看法与路径 A 完全一致。
四、数据与隐私
这一节按「哪些数据留在本机、哪些会离开本机」如实分开写。
留在本机的
- 全部药品记录(名称、使用人、规格、两个日期、备注等)只保存在你这台设备的这个浏览器里,没有账号,没有服务器数据库,不上传、不同步。清除浏览器数据、换浏览器或换设备后将无法找回。
- 拍照识别保留的照片:识别完成后,会被压小并一并存进同一份本地记录。这份留存的副本不上传、不同步;但要分清——识别当时那张照片是上传过的(见下一节)。
- 联网查询的结果缓存(药名 → 天数)也存在本地,保留 30 天。
- 模拟日期不写入本地存储,刷新页面即回到真实今天——避免把假日期留给下一个打开页面的人。
会离开本机的(务必知悉)
- 拍照识别 → 阿里云百炼(dashscope.aliyuncs.com)+ 智谱 AI(open.bigmodel.cn):点「开始识别」后,你选中的照片本身会分别上传给这两家——第二家用于交叉核对第一家的结果(见 2.3)。若照片里拍到了药盒之外的东西(处方、姓名、家庭环境等),这些内容也会一并被上传给两家。
- 联网查询开封效期 → 智谱 AI(open.bigmodel.cn):点该按钮后,你填写的产品名称会被发送到该服务用于检索与提炼。
- 提交药库反馈 → 本站服务器:点页脚「找不到你的产品?告诉我一声」并提交后,你填写的产品名称与补充说明会保存在本站服务器上,用于以后补充内置药库。这里不会给你单独回复,也请不要填写姓名、电话等个人信息。
部署在服务器上的版本,请求由本站的服务端代理分别转发给上述两家,浏览器不携带任何密钥;代理只记录请求方法、路径、状态码、耗时与来源 IP,不记录照片内容与药名内容。
由此带来的取舍
- 清除浏览器数据 / 换浏览器 / 换设备 ⇒ 记录全部消失且无法找回,因为云端没有任何副本。重要记录请自行截图或另行记录。
- 无痕窗口关闭即清空。
- 本地存储写满时会提示「本地存储空间不足,请删除部分旧记录」——照片是主要占用来源。
五、常见问题
内置药库里没有我的药,怎么办?
提示会写「🔍 内置药库未收录「XX」……」。三个办法:①点 🔍 联网查询开封效期;②直接在 开封后可用天数 里按说明书手填;③若说明书没写开封期限,就只填 印刷有效期,卡片会只跑第一个时钟。
为什么提示说「有多个相近条目,未自动预填」?
因为你输入的名字同时像药库里好几条、而它们的开封天数并不一致(例如「碘伏」在库里就分蘸取使用、罐装棉签、独立包装单支三种,分别是 7 天、7 天、1 天)。这种情况下应用拒绝替你猜,请补全到完整通用名(最好带剂型),或改用联网查询。
我改了药名,开封天数怎么跟着变了?
这是有意设计。凡是药库自动填进去的值,都会随药名改动清空重算,以免把上一个药的天数留在新药身上。你自己手动输入过的天数不会被改——此时字段下方小字显示「已手动修改」。看这行小字就能分辨当前值的来路。
为什么点了 +30天,直接就「已过期」了?
因为大部分常见药的开封期是 28 或 30 天,加 30 天必然跨过终点。要逐档看到绿 → 黄 → 红,请按第二节的顺序点 +20天 → +1天 → +7天,或用自定义日期精确落在某一档。
顶部一直挂着红色横幅/黄色横条,是出错了吗?
不是。黄色横条表示你还停在模拟日期,刷新页面就会自动回到真实今天;红色横幅表示当前日期下确实有药已到期。点黄条上的「点此恢复今天」或该面板里的 恢复今天 即可回到真实日期,红色横幅通常随之消失。
没有网络还能用吗?
能。手动填写 + 1832 条内置药库 + 全部计时与提醒功能都不依赖网络。只有拍照识别和联网查询需要联网;识别服务未配置时,拍照页会直接提示「未配置识别服务,可直接使用「手动填写」,内置药库离线可用」。
拍照识别认错了怎么办?
识别结果区每条都可就地改:有效期没拍清会给出日期输入框让你人工确认(也可以选 暂不填写),开封天数可直接改数字,或点 修改信息 把整条灌进手动表单再改。结果区底部写着「识别仅辅助录入,请确认包装信息后保存。」——请务必核对后再保存。
「使用人」能让家人各自登录、各看各的吗?
不能。使用人只是记录上的一个标签,用于卡片徽章和列表筛选。本作品没有账号、没有多人共享、没有云同步,所有记录只在本机浏览器内。
换手机 / 清了浏览器缓存,记录还在吗?
不在了,且无法恢复——记录只存在原设备的浏览器里,没有云端副本。这是「不需要注册、记录不上云」这一选择的代价。
为什么有的药显示「无需开封计时」?
因为药库对这类药本来就不给开封天数(独立铝箔袋、单支独立包装、按外盒效期使用等)。这类记录只跑印刷有效期一个时钟,所以添加时需要填印刷有效期,否则无法保存。
六、免责声明
开封后有效期为参考值,请以药品说明书为准。
本应用不构成用药建议,不判断药品是否变质。
- 内置药库的天数为按公开资料与药典通则整理的保守参考值,同一药品不同厂家的说明书口径可能不同;一旦与说明书冲突,以说明书为准。
- 联网查询与拍照识别的结果由第三方 AI 生成,可能出错,仅作录入辅助,请核对包装与说明书后再保存。
- 本应用只按日期做算术,无法判断药品是否已经变质。即使卡片仍是绿色,出现变色、分层、异味、絮状物、结块等情况,请立即停止使用。
- 用药相关问题请咨询医师或药师。废弃药品请按当地规定处理。