DateUtils 提供兩組函數:StartOfAxxx/EndOfAxxx 接收數值參數(年、月、周序數、日序數);StartOfTheXxx/EndOfTheXxx 接收 TDateTime 參數。返回對應週期的起始/結束瞬間(含毫秒)。
| 數值參數版 | TDateTime 參數版 | 含義 |
|---|---|---|
| StartOfAYear(Year) | StartOfTheYear(DateTime) | 年初 0:0:0.000 |
| EndOfAYear(Year) | EndOfTheYear(DateTime) | 年終 23:59:59.999 |
| StartOfAMonth(Year, Month) | StartOfTheMonth(DateTime) | 月初 0:0:0.000 |
| EndOfAMonth(Year, Month) | EndOfTheMonth(DateTime) | 月末 23:59:59.999 |
| StartOfAWeek(Year, WeekOfYear) | StartOfTheWeek(DateTime) | 周一 0:0:0.000 |
| EndOfAWeek(Year, WeekOfYear) | EndOfTheWeek(DateTime) | 周日 23:59:59.999 |
| StartOfADay(Year, DayOfYear) | StartOfTheDay(DateTime) | 當日 0:0:0.000 |
| EndOfADay(Year, DayOfYear) | EndOfTheDay(DateTime) | 當日 23:59:59.999 |
uses DateUtils;
procedure TForm1.FormCreate(Sender: TObject);
var dt, t1, t2, t3, t4: TDateTime; s1, s2, s3, s4: string;
begin
dt := StrToDateTime('2009-5-20 11:22:33');
{年}
t1 := StartOfAYear(2009); t2 := StartOfTheYear(dt);
t3 := EndOfAYear(2009); t4 := EndOfTheYear(dt);
{結果: 2009-1-1 0:0:0.000 / 2009-12-31 23:59:59.999}
{月}
t1 := StartOfAMonth(2009, 5); t2 := StartOfTheMonth(dt);
t3 := EndOfAMonth(2009, 5); t4 := EndOfTheMonth(dt);
{結果: 2009-5-1 0:0:0.000 / 2009-5-31 23:59:59.999}
{周}
t1 := StartOfAWeek(2009, 21); t2 := StartOfTheWeek(dt);
t3 := EndOfAWeek(2009, 21); t4 := EndOfTheWeek(dt);
{結果: 2009-5-18 0:0:0.000 / 2009-5-24 23:59:59.999}
{日}
t1 := StartOfADay(2009, 140); t2 := StartOfTheDay(dt);
t3 := EndOfADay(2009, 140); t4 := EndOfTheDay(dt);
{結果: 2009-5-20 0:0:0.000 / 2009-5-20 23:59:59.999}
end;
應用: 報表時間範圍查詢(本月/本周/今日)、定時任務執行窗口判斷、日曆 UI 邊界計算。