任务
给定版本号、评审时刻以及可选的废弃记录,返回该版本当前所处阶段;时间边界要按 ISO 字符串归一化后比较。
契约
- 输入:JSON 对象:{ version, now, deprecation?: { announcedAt, sunsetAt } }
- 输出:JSON 对象:{ version, stage }
样例
- 输入
{"version":"2024-06","now":"2024-03-01T00:00:00Z","deprecation":{"announcedAt":"2024-06-01T00:00:00Z","sunsetAt":"2024-12-01T00:00:00Z"}}-> 期望{"version":"2024-06","stage":"current"}。在公告日之前,该版本仍属现行。 - 输入
{"version":"2024-06","now":"2024-09-01T00:00:00Z","deprecation":{"announcedAt":"2024-06-01T00:00:00Z","sunsetAt":"2024-12-01T00:00:00Z"}}-> 期望{"version":"2024-06","stage":"deprecated"}。该版本已公告将被移除,但尚未到下线时间。
参考实现
function solve({ version, now, deprecation }) {
if (!deprecation) return { version, stage: 'current' };
if (now >= deprecation.sunsetAt) return { version, stage: 'sunset' };
if (now >= deprecation.announcedAt) return { version, stage: 'deprecated' };
return { version, stage: 'current' };
}
为什么有效
API 的可移植性取决于使用方能否知道某个版本何时停止支持。把阶段判断写成函数,能让发布说明与废弃响应头保持一致。
ISO 时间戳要先归一化再比较;到达下线时间边界即属于已下线。