iPhone下有按照农历提醒的软件吗?
你是不是也有这个烦恼?
我想在手机日历里添加农历初一、十五的吃素提醒,结果发现:
- 网上的农历日历订阅,把春节、国庆、中秋所有节假日全塞进去了
- 我只想关注初一十五这两个日子,却被一堆无关的信息淹没
- 手动每个月加提醒?太麻烦了,而且容易忘
能不能有一个只包含初一十五的纯净版农历日历?
带着这个问题,我用了一个周末,做了一个完全免费、自动更新的解决方案。现在分享给大家,不管你是程序员还是普通用户,都能用上。
先看看效果
导入之后,你的手机日历里只会显示这样的内容:
📅 2026年8月12日 - 初一 (农历七月初一)
描述:今天吃素
📅 2026年8月27日 - 十五 (农历七月十五)
描述:今天吃素没有法定节假日,没有调休安排,只有你真正关心的那两个日子。而且每个月会自动往后滚动更新,永远保持未来 13 个月的数据。
核心思路(说人话版)
其实原理很简单:
- 写个小脚本:算出未来 13 个月里哪些天是初一或十五
- 生成日历文件:把这些日期打包成标准的
.ics格式(这是全球通用的日历文件格式,iPhone、安卓、电脑都能用) - 放在 GitHub 上:利用 GitHub 的免费自动化服务,每个月自动运行一次脚本,更新日历文件
- 复制链接订阅:把文件的链接复制到你的日历 App 里,搞定!
整个过程不需要买服务器,不需要花钱,只要有个 GitHub 账号就行。
方案一:直接用现成的(适合非程序员)
如果你不想折腾代码,可以直接订阅我已经做好的版本:
📱 简体中文版(推荐国内用户)
复制下面这个链接,然后在你的日历 App 里选择”添加日历订阅”或”订阅日历”,粘贴进去即可:
https://cdn.jsdelivr.net/gh/HenryYannis/lunar-vegetarian-calendar@main/chuyi-shiwu-simplified.ics📱 繁体中文版
https://cdn.jsdelivr.net/gh/HenryYannis/lunar-vegetarian-calendar@main/chuyi-shiwu-traditional.ics不同设备的操作方法:
- iPhone/iPad:设置 → 日历 → 账户 → 添加账户 → 其他 → 添加已订阅的日历 → 粘贴链接
- 安卓手机:打开日历 App → 菜单 → 管理日历 → 添加日历 → 订阅日历 → 粘贴链接
- 电脑端(Outlook/Google 日历):找到”从 URL 添加日历”或”订阅日历”功能,粘贴链接
订阅后,日历会自动同步,每月月初会自动更新未来几个月的数据,完全不用管它。
方案二:自己动手定制(适合程序员)
如果你想修改提醒的内容(比如改成生日提醒、纪念日提醒),或者想学习这套自动化方案,可以继续往下看。
第一步:准备环境
你需要:
- 一个 GitHub 账号(免费注册)
- 电脑上安装 Node.js(去官网下载就行)
第二步:创建项目
在 GitHub 上新建一个仓库,然后把下面的两个文件放进去:
1️⃣ generate-calendar.js(核心脚本)
这个脚本负责计算农历日期并生成日历文件:
const fs = require('fs');
const { Lunar } = require('lunar-javascript');
const dayjs = require('dayjs');
// 组装 ICS 文件头
let icsContent = `BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//HenryYannis//Lunar Vegetarian Calendar//CN
CALSCALE:GREGORIAN
X-WR-CALNAME:农历初一十五(吃素)
X-WR-TIMEZONE:Asia/Shanghai\n`;
// 获取当月的一号,往前推 1 个月作为起点
const startMonth = dayjs().startOf('month').subtract(1, 'month');
const endMonth = startMonth.add(13, 'month');
// 遍历每一天
let currentDate = startMonth;
while (currentDate.isBefore(endMonth)) {
const lunar = Lunar.fromDate(currentDate.toDate());
const day = lunar.getDayInChinese();
// 判断是否是初一或十五
if (day === '初一' || day === '十五') {
const dateStr = currentDate.format('YYYYMMDD');
const summary = `${day} (农历${lunar.getMonthInChinese()}月${lunar.getDayInChinese()})`;
icsContent += `BEGIN:VEVENT
UID:${dateStr}@lunar-calendar
DTSTAMP:${new Date().toISOString().replace(/[-:]/g, '').split('.')[0]}Z
DTSTART;VALUE=DATE:${dateStr}
SUMMARY:${summary}
DESCRIPTION:今天吃素
END:VEVENT\n`;
}
currentDate = currentDate.add(1, 'day');
}
icsContent += 'END:VCALENDAR';
// 写入文件
fs.writeFileSync('chuyi-shiwu.ics', icsContent);
console.log('✅ 日历文件生成成功!');2️⃣ package.json(依赖配置)
{
"name": "lunar-calendar-subscription",
"version": "1.0.0",
"dependencies": {
"lunar-javascript": "^1.6.12",
"dayjs": "^1.11.10"
}
}第三步:配置自动化
在仓库里新建文件夹 .github/workflows,然后创建文件 update.yml:
name: Update Lunar Calendar
on:
schedule:
# 每月 1 号凌晨 0 点执行(北京时间)
- cron: '0 16 1 * *'
workflow_dispatch: # 支持手动点击运行
jobs:
build-and-commit:
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Dependencies
run: npm install
- name: Generate ICS File
run: node generate-calendar.js
- name: Commit and Push
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: "chore: update calendar [skip ci]"
file_pattern: "*.ics"第四步:获取订阅链接
配置好后,手动触发一次工作流(在 Actions 标签页点击 “Run workflow”),等它运行完成,就会生成 chuyi-shiwu.ics 文件。
复制这个文件的 Raw 链接(或者用 jsDelivr CDN 加速):
https://cdn.jsdelivr.net/gh/你的GitHub用户名/仓库名@main/chuyi-shiwu.ics把这个链接粘贴到你的日历 App 里,就大功告成了!
还能怎么玩?
这套方案的灵活性很高,你可以按需定制:
💡 改造成生日提醒
把脚本里的判断条件改成家人的生日日期,每年自动提醒
💡 增加更多农历节日
除了初一十五,还可以加上端午、中秋、重阳等传统节日
💡 结合天气预报
在 DESCRIPTION 字段里加入当天的天气信息(需要调用天气 API)
💡 改成工作提醒
比如每周一早上 9 点提醒开例会,每月 15 号提醒交报表
为什么选择这个方案?
你可能会问:网上不是有很多现成的农历日历吗?为什么要自己搞?
我的理由是:
✅ 完全可控:只显示你关心的日期,不会被无关信息干扰
✅ 永久免费:依托 GitHub 基础设施,不用买服务器
✅ 自动更新:每月自动往后滚动,永远保持最新数据
✅ 高度定制:开源代码,想怎么改就怎么改
✅ 稳定可靠:只要 GitHub 不倒闭,服务就不会挂
最后想说
科技的乐趣,大概就是写一点代码,解决自己生活中的小麻烦。
这个项目我已经开源了,欢迎 Fork 和提 Issue: 👉 GitHub 仓库地址
如果你有其他类似的定制化需求(比如纪念日提醒、定期打卡提醒),也可以在评论区聊聊,说不定我能帮你一起实现~
对了,我还做了一个在线工具箱网站 小宝科技站,里面有一些实用的效率工具,感兴趣的朋友可以去看看。
如果你觉得这篇文章对你有帮助,欢迎点赞收藏,也欢迎分享给身边有同样需求的朋友!