我最早被这个需求打动,是给一位做HR的朋友做“员工生日与合同到期一体化提醒表”的时候。她用Excel管理几百号人的档案,抱怨最多的一句话是:今天过的到底是谁的生日、谁的合同快到期了,打开表格第一眼根本看不出来。后来我在表格里引入NOW和TODAY这两个时间函数,把年龄计算、下一次生日倒计时、合同剩余天数全部做成了自动刷新。表格一改完,她再也不用每天手动改日期,开会前打开文件扫一眼,哪些人要续约、哪些人马上过生日,几乎零成本掌握。
这篇文章就把这套“时间魔法”完整拆开:从Excel日期的最底层逻辑讲起,再到NOW与TODAY的区别、动态年龄的各种算法、生日和合同到期的动态倒计时,最后给一个可以直接套用的人事信息表案例。无论你是做行政、人事、项目管理,还是只想给家人做一张“孩子成长天数表”,这里的公式都能直接复制改着用。
1. 动态日期的“地基”:NOW和TODAY到底在算什么
我先讲一个很多人忽略的事实:Excel里日期不是一个“字”,而是一个“数字”。只有理解这一点,你才能真正明白为什么NOW和TODAY能帮你做动态年龄和倒计时。
1.1 Excel的日期本质上是一串序列数
在Windows版Excel里,系统会把1900年1月1日当作序列数1,1900年1月2日就是2,依此类推。今天我们打开Excel,如果在一个单元格里输入一个日期,把一个比较新的日期用“常规”格式显示,你会看到一串四五万的大数字,比如2024年11月1日的实际值大约是45000多。日期之所以能在屏幕上显示成“2024/11/1”,只是因为你给这个单元格套了日期格式,真正参与计算的底层值始终是一个数字。
这个底层逻辑的意义在于:两个日期相减,结果直接就是相差的天数。比如“截止日期单元格减去今天日期单元格”,得到的就是剩下的天数。年龄、倒计时、工作年限,本质上都是在“数字相减”的基础上做文章。真正要把“数字”变回“有意义的时间文本”,需要借助NOW、TODAY、DATEDIF之类的函数,把时间维度翻译成人能看懂的年月日。
1.2 NOW和TODAY:一个带“秒针”,一个只翻日历牌
这两个函数都是直接读电脑系统当前时间,区别在于:
TODAY():只返回当前日期,底层是一个整数,没有时间小数部分。NOW():返回当前日期加当前时间,底层是整数加小数,比如某个时刻的真实值是45266.7583,前面的整数代表日期,后面的小数代表时间。
如果只把单元格设置成日期格式,两者看起来相同;但把格式切成“yyyy-mm-dd hh:mm:ss”,NOW()会实时显示出几点几分几秒,TODAY()永远只显示当天00:00。顺便提醒一句:NOW()里哪怕只是打开了文件没做任何操作,重新计算后它也会跳到当前时刻;TODAY()相对“温和”,它只关心是哪一天,不关心是白天还是晚上。
什么时候用NOW,什么时候用TODAY,我的习惯很简单:只关心“还剩几天”就用TODAY;需要记录操作到“几分几秒”、或做某些时间精度要求高的提醒,才用NOW。因为NOW的刷新会让表格内容在高频重算时发生肉眼可见的变化,不如TODAY稳定。
1.3 易失函数与“每次打开都变”的机制
NOW和TODAY在Excel里都被归为“易失函数”(volatile functions),意思是每当工作表重新计算一次,函数就得重新读当前系统时间。默认情况下,Excel在你修改任何一个单元格、打开工作簿、或按F9强制计算时,都会触发全表重算,因此这些函数会跟着跳到当前时间。这就是为什么很多用户第一次做动态表特别不适应:昨天填好的“今天”到今天打开,怎么自己变了?明明只有我是唯一使用者,表格自己“长了腿”。
如果你需要保留某一天的固定日期作为历史快照,不要用TODAY,而是按快捷键Ctrl + ;,这是插入“静态当前日期”的常用方式;要插入固定当前时间用Ctrl + Shift + ;。这条经验在自动化人事表单里特别重要,因为你不希望一条“登记日期”刚录完,第二天自己悄悄变成第二天,让流程记录失真。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 动态年龄计算:从“周岁”到“年月日”全自动
标题里写了“动态年龄计算”,这个词在人事、教育、会员管理场景里太常见了。传统的错误做法是手动填年龄,第
