计算直到圣诞节的天数

Fra*_*anz 1 delphi date

我需要计算直到下一个圣诞节24.12的天数.我想知道下一个圣诞节是否有一个非常简单的计算功能.

     deltaDays := Today - NextChristmas; 
Run Code Online (Sandbox Code Playgroud)

And*_*and 10

您可以使用以下DaysBetween功能DateUtils:

var
  Christmas: TDate;
begin

  Christmas := EncodeDate(YearOf(Now), 12, 24);
  ShowMessageFmt('Days to Christmas: %d', [DaysBetween(Now, Christmas)]);
Run Code Online (Sandbox Code Playgroud)

当然,需要特殊的逻辑来处理圣诞节后但新年前的日子.


Cho*_*awi 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;
Run Code Online (Sandbox Code Playgroud)

说明:

  • 我们应该已经知道,Delphi的TDateTime数据类型实际上是一个Double(浮点数).整数部分表示日期,分数表示时间.这就是为什么我Int在函数的开头使用,以获取整数(日期)部分.实际上,它没有用,所以你可以简单地删除它.
  • 要知道当明年圣诞节发生的,我们需要的参考日期的年份,我们可以使用YearOfDateUtils单元.但是因为我们必须检查参考日期是否在圣诞节和新年之间,所以我们在这里DecodeDate也可以获得月和日值.
  • 检查的月份是12(12月)和这一天是25或更大,如果答案为是,则增加年份值,接下来的圣诞节必须在明年.
  • 使用建立下一个圣诞日期EncodeDate.
  • 使用减法运算符( - )来获取从参考日期(参数)到下一个圣诞节的天数.将其分配给Result变量以返回它.

用法示例:

ShowMessageFmt('Days to Christmas: %d', [DaysToNextChristmas(Now)]);
Run Code Online (Sandbox Code Playgroud)

我希望它有所帮助.