用workers搭建节日倒计时api
創建於:2025年3月9日
創建於:2025年3月9日
用workers搭建节日倒计时api
下面的示例演示了如何使用 Cloudflare Workers(或同类 Serverless 平台的 Worker 方案)来搭建一个简易的“节日倒计时” API,给前端或其他调用方提供 JSON 格式的倒计时信息。思路和步骤大致如下:
明确需求和数据:
准备节日数据:
核心逻辑:
json{ "festivals": [ { "name": "中秋节", "date": "2025-10-06", "daysLeft": 211 }, { "name": "国庆节", "date": "2025-10-01", "daysLeft": 206 } ] }
编写 Worker 代码:
wrangler
CLI(如需)或使用 Cloudflare Dashboard 的在线编辑器。以下是一个简单的 Workers 入口文件 index.js
。它会在特定路由(如 GET /countdown
)下返回 JSON 格式的倒计时数据。
js// index.js /** * 节日数据示例:公历日期 * date 格式: YYYY-MM-DD */ const FESTIVALS = [ { name: '元旦', date: '2025-01-01' }, { name: '春节', date: '2025-01-29' }, { name: '中秋节', date: '2025-10-06' }, { name: '国庆节', date: '2025-10-01' }, // 可以继续添加更多节日... ]; export default { async fetch(request, env, ctx) { const url = new URL(request.url); // 可以通过路径判断,也可直接对根路径做处理 if (url.pathname === '/countdown') { // 计算倒计时 const data = getFestivalsCountdown(); return new Response(JSON.stringify(data), { headers: { 'Content-Type': 'application/json; charset=utf-8' }, }); } // 如果不是 /countdown 路由,就返回一个简单的提示或 404 return new Response('Not Found', { status: 404 }); }, }; /** * 计算每个节日剩余天数的函数 */ function getFestivalsCountdown() { // 获取当前日期(UTC) // 若要使用北京时间,可考虑:new Date().toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' }) // 也可以直接把此日期转成 UTC 0 点来算 const now = new Date(); // 遍历所有节日,计算剩余天数 const festivalCountdowns = FESTIVALS.map((f) => { // 解析节日日期 // 此时默认 JS 中 new Date() 以 UTC 或系统本地时间为准,一定要注意时区偏差 const festivalDate = new Date(f.date); // 计算差值(毫秒) const diffTime = festivalDate.getTime() - now.getTime(); // 转为天数并向下取整 const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); return { name: f.name, date: f.date, daysLeft: diffDays, }; }); // 这里返回的格式可根据需要灵活调整 return { festivals: festivalCountdowns }; }
new Date()
默认使用系统本地时区,也会受服务器(或 worker)运行环境的时区影响。toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' })
等方式先转化,然后再构造一个新的 Date
对象。但要注意字符串再转换回日期时可能还有一点格式处理。安装 wrangler(如果本地开发)
bashnpm install -g wrangler
初始化工程
bashwrangler init festival-countdown
按需修改 wrangler.toml
文件,可以写入你的账号 ID 等信息。
将上方代码放入 index.js
也可改名为 worker.js
等,需在 wrangler.toml
里更新 main
字段。
本地预览测试
bashwrangler dev
在终端里可以看到一个本地预览地址,访问 http://127.0.0.1:8787/countdown
就会返回 JSON 数据。
发布
bashwrangler publish
成功后,会在你的 Cloudflare Workers 上生成一个子域名,比如 https://festival-countdown.your-subdomain.workers.dev/countdown
,即可通过此地址获取倒计时数据。
成功请求 GET /countdown
路径后,可能返回如下 JSON(基于当前时间不同,天数也会不同,仅作示例):
json{ "festivals": [ { "name": "元旦", "date": "2025-01-01", "daysLeft": 300 }, { "name": "春节", "date": "2025-01-29", "daysLeft": 328 }, { "name": "中秋节", "date": "2025-10-06", "daysLeft": 577 }, { "name": "国庆节", "date": "2025-10-01", "daysLeft": 572 } ] }
GET /countdown?name=中秋节
,只返回对应的倒计时。这样,你就可以在任意场景(前端、移动端、小程序、甚至命令行里)通过这个简单的节日倒计时 API 获取 JSON 数据并加以展示或处理。希望对你有所帮助,祝你开发顺利!