倒计时
设置一个目标日期与时区,面板每秒更新一次,显示剩余的年、月、日、时、分、秒。从过去日期也能正向计时。
目标时间默认是本地时区的午夜(00:00:00)。点击预设可立即应用;自定义日期请点击「设定目标」。
这个倒计时工具能做什么
设置一个未来的日期和时间(可选用其他时区),下方的面板就会每秒倒计时一次,以年、月、日、时、分、秒显示剩余时间。同一个面板也支持「已过时间」——如果目标已过去,同样的分解会从该事件开始正向计时。目标的 Unix 时间戳也会一并显示,方便你粘贴到日历邀请、cron 计划或数据库记录中。
距圣诞节、新年及其他周期性事件的天数
日期选择器上方的预设按钮覆盖了人们最常想要倒计时的搜索。「下一个圣诞节」会把日期跳转到当前时区 12 月 25 日午夜(如果今年的已过则跳到明年),「下一个新年」跳到 1 月 1 日,而「Y2038 溢出」则倒计时到带符号 32 位 Unix 时间戳回绕的时刻。每个预设只是一个日期标记——应用后你可以编辑它来微调时间或更改时区。
- 距圣诞节的天数:点击「下一个圣诞节」,时区将默认设为你的本地时间
- 距 2027 年的天数:在 2026 年 1 月 2 日当天或之后点击「下一个新年」,即可获得 2027 年新年倒计时
- 距发布的天数:输入发布日期,并将时间设为上午 9:00(PT)或你的发布时段
- 距截止日期的天数:输入截止日期;分解行可像一句话一样用于状态汇报
倒计时到 2027 年(或任意指定年份)
想要倒计时到某个特定年份?在日期输入框中输入 2027-01-01,并把时间保留为你所在时区的 00:00:00——面板会显示距该年在你所在地开始那一刻还有「X 天 Y 小时」。如果你需要为所有人倒计时到同一时刻(例如一次协调一致的发布),请将时区设为 UTC,而不是保留本地时区。分解下方显示的 Unix 时间戳在每个时区都相同,正是这一特性使其具有可移植性。
选择正确的时区
同样的挂钟日期和时间,在不同时区代表不同的时刻。对于本地庆祝的日子——生日、纪念日、除夕——的倒计时,请保留浏览器检测到的时区。对于全球公布的时刻——卫星发射、闰秒插入、合同截止——的倒计时,请将时区设为公告所用的时区(通常是 UTC)。两侧的夏令时切换都会自动处理;底层的纪元值永远不会偏移。
从过去的事件正向计时
如果目标已经过去,同一个面板就会变成「已过时间」计数器。这便于显示「项目启动以来 X 天 Y 小时」或「距上次生产事故的时间」。数字为正值,方向标记会切换为「目标已过去」,因此你无需改写即可将分解内容复制到状态页面或发布说明中。
- 自 Unix 纪元开始以来的时间:将目标设为 1970-01-01 00:00:00 UTC
- 自某次软件发布以来的时间:将目标设为该发布的 UTC 时间戳
- 自某个个人里程碑以来的时间:将目标设为那一天在你所在时区的午夜
Y2038 —— 一个对软件至关重要的真实倒计时
「Y2038 溢出」预设倒计时至 2038-01-19 03:14:07 UTC,即带符号的 32 位 Unix 时间戳发生溢出的时刻。届时仍在使用 32 位 time_t 的程序都会回绕为代表 1901 年的负数。现代操作系统和语言运行时已转向 64 位时间戳;隐患往往潜藏在嵌入式固件和老旧数据库中。如果你正在审计一批设备,这个正在进行的倒计时可作为报告中一个有用的关键数字。
在你自己的代码中嵌入倒计时
无论使用哪种语言,算法都相同:用目标纪元减去当前纪元,再将余下的时间分解为年/月/日/时/分/秒。本工具只将目标计算一次为 Unix 时间戳,实时刷新只是在每个间隔读取 Date.now()。用下面的代码片段在你的技术栈中复现它——唯一棘手的是按日历分解的部分(月份和年份长度不固定)。
- JavaScript: const left = target - Date.now(); const days = Math.floor(left / 86_400_000);
- Python: delta = target - datetime.now(timezone.utc); delta.days, delta.seconds
- Go: time.Until(target).Hours() / 24
- 对于按日历分解,建议使用库(luxon、date-fns、dateutil、java.time),而不是自己手写月份计算