您的公式构成正确。意外的结果是由于Excel如何存储不同类型的数据。
根据工作簿级别的设置,Excel使用两种类似的系统来存储日期。
1900年日期系统
在1900年日期系统中,支持的第一天是1900年1月1日。输入日期时,该日期将转换为代表自1900年1月1日以来经过的天数的序列号。例如,如果输入1998年7月5日,Excel将日期转换为序列号35981。
默认情况下,Microsoft Excel for Windows使用1900日期系统。1900年的日期系统使Excel和其他设计为在MS-DOS或Microsoft Windows下运行的电子表格程序(例如Lotus 1-2-3)之间具有更好的兼容性。
1904年日期系统
在1904年日期系统中,支持的第一天是1904年1月1日。输入日期时,该日期将转换为代表自1904年1月1日以来经过的天数的序列号。例如,如果输入1998年7月5日,Excel会将日期转换为序列号34519。
默认情况下,Macintosh的Microsoft Excel使用1904年日期系统。由于早期Macintosh计算机的设计,不支持1904年1月1日之前的日期。此设计旨在防止与1900年不是a年有关的问题。如果您切换到1900日期系统,则Macintosh的Excel确实支持早于1900年1月1日的日期。
这些摘录摘自:https : //support.microsoft.com/en-us/help/214330/differences-between-the-1900-and-the-1904-date-system-in-excel
序列号是对自1900年1月1日以来的日期数的简单计算,包括1900年2月29日的虚假日期。不过,DAY函数也可以视为数据类型转换函数。它以日期序列号作为输入,并返回整数作为输出。在您的示例中,如果我们认为18代表一个日期序列,并且算出从1900年1月1日起的18天,那么我们将以1900年1月18日结束。
前端的简单解决方法是将单元格格式更改为Number或General。这将告诉Excel将其显示为整数,而不是尝试将其解释为日期序列。在后端,一切都很好。整数结果可以在任何其他公式中使用,并且将正常运行。
例如,假设我们要创建一个条件公式,该公式告诉我们本月15日是否已经过去。我们可以使用:
=IF(DAY(TODAY())>15,"The 15th has passed","It is not yet the 15th")
使用日期序列来完成相同的结果要困难得多,因此返回整数的DAY函数最终在Excel的常见用例环境中更加有用。