我需要计算直到下一个圣诞节24.12的天数。 我想知道下一个圣诞节是否有一个非常简单的计算功能。
deltaDays := Today - NextChristmas;
答案 0 :(得分:10)
您可以使用DaysBetween
中的DateUtils
功能:
var
Christmas: TDate;
begin
Christmas := EncodeDate(YearOf(Now), 12, 24);
ShowMessageFmt('Days to Christmas: %d', [DaysBetween(Now, Christmas)]);
当然,需要特殊的逻辑来处理圣诞节后但新年之前的日子。
答案 1 :(得分:8)
如果你在代码中经常使用它,最好创建一个函数来完成它,如下所示:
function DaysToNextChristmas(Date: TDateTime): Cardinal;
var
Year, Month, Day: Word;
Christmas: TDateTime;
begin
Date := Int(Date);
DecodeDate(Date, Year, Month, Day);
if (Month = 12) and (Day >= 25) then Inc(Year);
Christmas := EncodeDate(Year, 12, 25);
Result := Trunc(Christmas - Date);
end;
说明:
TDateTime
数据类型实际上是Double
(浮点)。整数部分表示日期,分数表示时间。这就是我在函数开头使用Int
来获取整数(日期)部分的原因。实际上,它没用,所以你可以简单地删除它。YearOf
单位的DateUtils
。但是因为我们必须检查参考日期是否在圣诞节和新年之间,所以我们使用DecodeDate
来获取月和日值。EncodeDate
建立下一个圣诞日期。Result
变量以将其返回。用法示例:
ShowMessageFmt('Days to Christmas: %d', [DaysToNextChristmas(Now)]);
我希望它有所帮助。