{"id":20618910,"url":"https://github.com/liby/off-work-reminder","last_synced_at":"2025-06-30T07:37:58.789Z","repository":{"id":261637334,"uuid":"884879094","full_name":"liby/off-work-reminder","owner":"liby","description":"一个用于 iOS 的自动化下班提醒工具，在满足工时要求后推送下班提醒。","archived":false,"fork":false,"pushed_at":"2024-12-19T13:12:27.000Z","size":2413,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-26T18:19:52.482Z","etag":null,"topics":["off-work","reminder","scriptable","shortcuts"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/liby.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-07T14:53:07.000Z","updated_at":"2024-12-19T13:12:30.000Z","dependencies_parsed_at":"2024-11-07T16:52:07.982Z","dependency_job_id":null,"html_url":"https://github.com/liby/off-work-reminder","commit_stats":null,"previous_names":["liby/off-work-reminder"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/liby/off-work-reminder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liby%2Foff-work-reminder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liby%2Foff-work-reminder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liby%2Foff-work-reminder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liby%2Foff-work-reminder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/liby","download_url":"https://codeload.github.com/liby/off-work-reminder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liby%2Foff-work-reminder/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262732008,"owners_count":23355473,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["off-work","reminder","scriptable","shortcuts"],"created_at":"2024-11-16T12:09:51.895Z","updated_at":"2025-06-30T07:37:58.754Z","avatar_url":"https://github.com/liby.png","language":"JavaScript","readme":"# Off Work Reminder\n\n## 简介\n\nOff Work Reminder 是一个用于 iOS 的自动化下班提醒工具。它结合 [Shortcuts（快捷指令）](https://support.apple.com/zh-cn/guide/shortcuts/welcome/ios)和 [Scriptable](https://scriptable.app/)，能在我们首次连接公司 Wi-Fi 时设置一个定时通知，以在满足工时要求后推送下班提醒。有助于我们合理安排工时，避免过度用脑，同时又能保证不会出现早退的情况。\n\n![Example](./assets/example.JPG)\n\n\u003cdetails\u003e\n\n\u003csummary\u003e下班时间计算规则\u003c/summary\u003e\n\n### 上午到达的情况\n\n1. **早到（09:00 前）**\n\n   - 不提前午休：18:00 下班\n\n   - 提前 15 分钟午休：18:15 下班\n\n2. **准时到达（09:00）**\n\n   - 不提前午休：18:00 下班\n\n   - 提前 15 分钟午休：18:15 下班\n\n3. **晚到（09:00 后，12:00 前）**\n\n   - 09:20 到达，不提前午休：18:20 下班\n\n   - 09:20 到达，提前 15 分钟午休：18:35 下班\n\n   - 09:40 到达，不提前午休：18:40 下班\n\n   - 09:40 到达，提前 15 分钟午休：18:55 下班\n\n### 下午到达的情况\n\n- **12:00 后到达**\n\n   - 视为上午请假，统一在 18:00 推送下班通知\n\n   - 不考虑迟到或请假时间\n\n   - 不考虑提前午休的情况\n\n### 不支持的特殊情况（需自行处理）\n\n- 上午请假：比如 09:00 到 10:00 请假，10:00 前到达，仍会按晚到的情况进行计算\n\n- 下午迟到或请假：比如 14:00 到达，仍会在 18:00 推送通知，需自行计算时间下班时间， 例如：\n\n    - 当日请假至 14:00，14:00 到达，18:00 下班\n\n    - 上午请假，13:00 应到达，但迟到未请假，14:00 到达，19:00 下班\n\n- 临时外出：公司规定临时外出需要在下班后补足工作时长的\n\n\u003c/details\u003e\n\n## 原理\n\n- **Shortcuts 自动化**：当我们的手机连接到指定的公司 Wi-Fi 时，自动触发快捷指令。\n\n- **参数传递**：快捷指令将包含下班时间和提前午休时间的字典（Dictionary）传递给 Scriptable 中的 `Off Work Notifier` 脚本。\n\n  - `workEndTime`：规定下班时间，例如 \"18:00\"\n\n  - `lunchBreakAdvanceMinute`：提前进入午休的分钟数，例如提前 15 分钟下楼吃午饭则设为 15\n\n- **Scriptable 脚本**：`Off Work Notifier` 脚本根据当前连接 Wi-Fi 的时间和传入的参数计算实际下班时间：\n\n  - 如果是 9 点前到达，将以 09:00 作为开始上班的时间\n\n  - 如果是 12 点前连接，将考虑提前午休的时间，延后下班时间\n\n  - 如果是 12 点后连接，将直接使用设定的下班时间发送提醒\n\n## 操作步骤\n\n1. 导入 Scriptable 脚本\n\n    \u003cdetails\u003e\n    \u003csummary\u003e截图\u003c/summary\u003e\n\n    ![Scriptable Setup](./assets/scriptable_setup.JPG)\n\n    \u003c/details\u003e\n\n    - 打开 Scriptable 应用，点击右上角 + 创建一个新的脚本。\n\n    - 将 [`Off Work Notifier`](./scripts/off-work-notifier.js) 文件中的代码复制并粘贴进去。\n\n    - 将脚本重命名为 `Off Work Notifier` 后选择 Done。\n\n2. 创建一个快捷指令或是直接在[这个指令的基础上](https://www.icloud.com/shortcuts/826ef9a8e1494a9e99701f9b0e96511b)进行修改\n\n    \u003cdetails\u003e\n    \u003csummary\u003e截图\u003c/summary\u003e\n\n    ![Shortcuts Setup](./assets/shortcuts_setup.JPG)\n\n    \u003c/details\u003e\n\n    1. 打开 Shortcuts 应用，创建一个新的快捷指令。\n\n    2. 添加以下两步操作：\n\n        1. 添加 Dictionary 动作，设置两个键值对：\n\n           - `workEndTime`: 文本类型，设置为预期下班时间，如 \"18:00\"\n\n           - `lunchBreakAdvanceMinute`: 数字类型，设置提前午休的分钟数，如 15\n\n        2. 搜索并选择 Scriptable \u003e Run Script `Off Work Notifier` 脚本，并将创建的 Dictionary 作为参数传递给脚本。\n\n3. 设置 Automation\n\n    \u003cdetails\u003e\n    \u003csummary\u003e截图\u003c/summary\u003e\n\n    ![Automation Setup](./assets/automation_setup.JPG)\n\n    \u003c/details\u003e\n\n    1. 在 Shortcuts 中创建一个新的 Automation，选择 WLAN 连接作为触发条件，指定公司 Wi-Fi。\n\n    2. 选择刚刚创建的 Off Work Setup 快捷指令。\n\n    3. 保存自动化设置。\n\n## 使用说明\n\n- 首次运行检测：该脚本每个自然日只会在第一次连接公司 Wi-Fi 时设置定时通知，有效避免重复提醒。\n\n- 自定义时间：在 Shortcuts 中更新 Dictionary 的值即可调整下班时间和提前午休时间。\n\n- 手动测试：你可以手动运行 Off Work Setup 快捷指令进行测试。\n\n## 已知问题\n\n- 像这类基于 Wi-Fi 连接触发的 Automation 每次运行时都会显示通知，[且目前没有办法静默执行](https://www.reddit.com/r/shortcuts/comments/170dopx/comment/k3jzxj8/?utm_source=share\u0026utm_medium=web3x\u0026utm_name=web3xcss\u0026utm_term=1\u0026utm_content=share_button)。由于 iPhone 会在锁屏后自动断开 Wi-Fi 连接，因此在重新连接至 Wi-Fi 时会再次运行，导致这种情况频繁发生，容易积攒通知，影响用户体验。","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliby%2Foff-work-reminder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fliby%2Foff-work-reminder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliby%2Foff-work-reminder/lists"}