保質期計算器
計算過期日期,管理商品保質期
什麼是保質期計算器?
保質期計算器是一個線上工具,幫助您快速計算商品的過期日期或推算生產日期。只需輸入生產日期和保質期天數,即可得出準確的過期時間;或輸入過期日期反推生產日期。支援批量加入多個商品,即時顯示剩餘天數提醒,方便管理家中食品、藥品、化妝品等商品的保質期。
本工具瀏覽器本地運行,無需上傳資料,保護您的隱私安全。
涉及醫療、法律或財務決策時,結果只能作為參考,應再核對官方規則或專業意見。
如何使用
如何使用
- 選擇計算模式:生產→到期 或 到期→生產
- 輸入日期和保質期天數
- 點選計算以查看結果
- 新增到產品清單進行批次管理
結果檢查
- 確認保質期是從生產日期、包裝日期、開封日期還是收貨日期起算;這些規則不可互換。
- 食品、藥品或受管制商品,請以包裝標示與當地法規為準。
使用場景
技術原理
到期日計算是以生產日期為錨點的整數日期運算。正向路徑透過 Date.setDate(date.getDate() + n) 計算 expiry = production + shelf_life_days,該方法原生處理月份和年份的進位(例如 2025-01-31 + 30 = 2025-03-02,因為二月有 28 天)。反向路徑以相同方式計算 production = expiry - shelf_life_days。為避免午夜附近的夏令時間偏移,頁面透過 Date.UTC(y, m, d) 將運算錨定到 UTC,並加上整毫秒數(n * 86400000),因為本地時間的 Date.setDate 在跨越夏令時間邊界時會有一小時的偏移,可能在美國的三月和十一月、歐盟的十月切換時翻轉顯示的日期。 保質期單位在加法前先正規化為天數:1 個月視為 30 天,1 年視為 365 天,這與大多數消費品包裝上使用的近似方法一致,但不是監管機構使用的精確日曆規則。Codex Alimentarius《預包裝食品標籤通用標準》(CXS 1-1985,修訂版)和中國的 GB 7718-2025 規定保質期自生產或包裝日期起算;藥品有效期遵循 ICH Q1A (R2) 穩定性試驗指南,列印的有效期取整到月份的最後一天(因此 2024-08-15 生產、18 個月保質期的藥品標示為 2026-02-28,而非 2026-02-15)。剩餘天數計數器為 (expiry_utc - now_utc) / 86400000,已過期天數使用 Math.floor 取整,距到期時間使用 Math.ceil 取整,新鮮度分級為閾值比較:remaining < 0 為已過期,0 ≤ remaining ≤ 30 為即將過期,其餘為正常。 持久化的觀察清單儲存在 window.localStorage 中的單一名稱空間鍵下,透過 JSON.stringify 序列化,大多數瀏覽器對每個來源限制約 5-10 MB(Chrome ~10 MB,Safari ~5 MB)。當配額超限時,瀏覽器會拋出 name 為 'QuotaExceededError' 的 DOMException,之後的寫入會被靜默丟棄,因此頁面必須回退到記憶體狀態。localStorage 是同步且同源的,因此條目在頁面重新載入後仍然存在,但永遠不會離開裝置。瀏覽器的通知 API(提醒功能使用)需要 Notification.requestPermission(),按來源授予,在 Windows ≥ 86 的 Chrome 上實際透過系統通知中心顯示,而非瀏覽器本身。
- 日期運算:Date.setDate(d.getDate() + n) 原生處理月份/年份進位,但在本地時間下會跨越夏令時間邊界並可能翻轉日期;Date.UTC + 整數毫秒是安全的做法。
- 單位正規化:1 個月 ≈ 30 天,1 年 ≈ 365 天——簡單但非精確日曆;藥品標籤遵循 ICH Q1A (R2) 並取整到有效期月份的最後一天。
- 剩餘天數 = Math.floor((expiry_utc - now_utc) / 86400000);閾值:remaining < 0 → 已過期,0 ≤ remaining ≤ 30 → 即將過期,否則為正常。
- 法規依據各異:食品保質期遵循 Codex CXS 1-1985 / GB 7718-2025(自生產或包裝日起算);化妝品使用 PAO(開封後使用期限),自首次使用起算;藥品使用 ICH Q1A 穩定性標定日期。
- 開封後保質期獨立於列印的有效期,且更短(例如已開封的橄欖油約 3 個月,儘管密封保質期為 24 個月);應單獨追蹤開封日期。
- localStorage 配額約為每個來源 5-10 MB,滿時拋出 QuotaExceededError(DOMException);之後的寫入會被靜默丟棄,因此應將 setItem 包在 try/catch 中並顯示使用者警告。
- 瀏覽器時鐘偏移(系統日期設定錯誤)會改變新鮮度分級;頁面讀取 new Date() 而非遠端時間來源,因此繼承任何使用者端時鐘錯誤。
範例
生產日 2026-01-01 + 730 天 = 2027-12-31
模式:生產日 -> 到期日
生產日期:2026-01-01
儲存期限:730 天(2 年)
到期日期:2027-12-31
狀態:仍在儲存期限內醫藥品:18 個月儲存期限
藥品批號:A26-0215
生產:2026-02-15
儲存期限:18 個月(約 548 天)
到期:2027-08-15
標示備註 — 醫藥業常見作法是以當月最後一天為到期日,
因此印製日期可能顯示為 2027-08-31反向推算:到期日 -> 生產日
模式:到期日 -> 生產日
包裝上印製的到期日:2028-06-30
儲存期限:36 個月
生產時間應於:2025-06-30 之前
可用於核對供應商所宣稱的生產日期
是否與批號標示相符。食品儲存檢查
品項:橄欖油 500ml
生產:2025-12-01
儲存期限:24 個月
到期:2027-12-01
檢查:仍在儲存期限內;以 FIFO 輪換庫存,並規劃在到期前約 30 天進行折扣常見問題
儲存期限是怎麼計算的?
生產日期 + 儲存時間 = 到期日。儲存時間可填入天、週、月或年。月份採取「截至目標月份最後一天」的處理(例如 1 月 31 日 + 1 個月 = 2 月 28/29 日),這也是多數法規對「自製造起 X 個月」的常見解釋。
剩餘天數是從今天開始算嗎?
是的。頁面會以你所在時區的今天日期為基準,顯示剩餘的天、週、月數。負數代表產品已經過期。狀態標籤(新鮮 / 即將到期 / 已過期)方便你快速分類。
「最佳賞味期」和「有效期限」有什麼不同?
最佳賞味期是品質期限——食品過後仍可安全食用,只是風味或口感可能下降。有效期限則是安全期限——過後可能對健康有風險。化妝品和藥品常會標示 PAO(開封後使用期限)符號,一旦開封後就以 PAO 取代印製的有效期限。
結果會考量儲存條件嗎?
不會。標示的有效期限假設產品依製造商建議方式儲存(陰涼、乾燥、密封、冷藏或冷凍)。高溫、潮溼與光照都會縮短實際儲存期,本頁無法模擬這些影響。請把計算出的日期視為上限。
已經「過期」的食品或藥品該怎麼處理?
未開封的罐頭和乾貨稍微超過最佳賞味期通常還能用——檢查外觀和氣味即可。乳製品、肉類和魚類一旦超過有效期限就應丟棄。藥品過期後可能效力減弱,部分甚至不安全;嚴重病況請勿仰賴過期藥品。
可以同時追蹤多項產品嗎?
請另開分頁——每個分頁互不影響。本頁不會儲存庫存資料。若需要長期追蹤,使用庫存管理 App 或一份簡單的試算表會更實用。
我的資料會被上傳嗎?
不會。計算過程在你的瀏覽器中執行,且不會在不同工作階段間保留。