DateUtils 單元提供了三個極其實用的相對日期常數:Yesterday、Today、Tomorrow,它們本質是預計算好的 TDateTime 值,直接拿來用即可,無需呼叫函數,代碼閱讀性極佳。
| 常數 | 類型 | 等價表達 | 說明 |
|---|---|---|---|
Yesterday | TDateTime | Date - 1 | 昨天 00:00:00 |
Today | TDateTime | SysUtils.Date | 今天 00:00:00 |
Tomorrow | TDateTime | Date + 1 | 明天 00:00:00 |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses DateUtils;
procedure TForm1.FormCreate(Sender: TObject);
var
t1, t2, t3: TDateTime;
begin
t1 := Yesterday;
t2 := Today; // 等同 SysUtils.Date
t3 := Tomorrow;
ShowMessageFmt('%s, %s, %s', [DateToStr(t1), DateToStr(t2), DateToStr(t3)]);
{輸出範例:2024-01-14, 2024-01-15, 2024-01-16}
end;
end.
// 最近 7 天範圍
var
StartDate, EndDate: TDateTime;
begin
EndDate := Today;
StartDate := Today - 6; // 包含今天共 7 天
end;
// 本週範圍(週一為起始)
var
WeekStart, WeekEnd: TDateTime;
begin
WeekStart := Today - (DayOfTheWeek(Today) - 1);
WeekEnd := WeekStart + 6;
end;
uses DateUtils;
// 明天這個時間
var t: TDateTime;
begin
t := Tomorrow + Frac(Now); // 保留當前時間部分
end;
// 上週同一天
var t: TDateTime;
begin
t := Today - WeeksBetween(Today, Today - 7) * 7; // 簡寫:Today - 7
end;
00:00:00,若需包含時間請自行加上 Frac(Now) 或使用 IncDay 系列函數Today 與 SysUtils.Date 完全等價,可互換使用DateUtils.TodayUTC 等(需較新版本支援)DateUtils 還提供函數版本,支援任意偏移量:
IncDay / DecDay:增加/減少天數IncWeek / DecWeek:增加/減少週數IncMonth / DecMonth:增加/減少月數(自動處理月末邊界)IncYear / DecYear:增加/減少年份StartOfTheDay / EndOfTheDay:取得當日 00:00:00 / 23:59:59.999善用 Yesterday/Today/Tomorrow 這三個常數,能讓日期邏輯代碼更具語義化,減少「魔術數字」帶來的維護負擔。