You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取选定日期的星期几?遍历月份日期时星期显示异常求助

解决Delphi遍历月份日期时显示对应星期的问题

你的核心问题是每次调用DayofWeek(CalendarView1.Date)取的都是日历控件选中日期的星期,而非当前遍历的日期,所以遍历10月所有日期时,始终返回的是10月第一天的星期值。

修改方案

在循环遍历每个日期时,针对当前的dtCurrentDate调用DayOfWeek,再把返回的数字转换为对应的星期文本即可。以下是修改后的完整代码:

var
  dtSelectedDate, dtStartDate, dtEndDate, dtCurrentDate: TDateTime;
  WeekNum: Integer;
  WeekStr: string;
begin
  dtSelectedDate := DateOf(CalendarView1.Date);
  dtStartDate := StartOfTheMonth(dtSelectedDate);
  dtEndDate := EndOfTheMonth(dtSelectedDate);

  EditMonth.Text := IntToStr(DaysInMonth(dtSelectedDate));
  EditStartDay.Text := DateToStr(dtStartDate);
  EditEndDay.Text := DateToStr(dtEndDate);

  dtCurrentDate := dtStartDate;
  while dtCurrentDate <= dtEndDate do
  begin
    T1.Insert;
    T1.FieldByName('Days').AsDateTime := dtCurrentDate;
    // 获取当前遍历日期的星期数字(Delphi中1=周日,2=周一...7=周六)
    WeekNum := DayOfWeek(dtCurrentDate);
    // 转换为中文星期文本
    case WeekNum of
      1: WeekStr := '星期日';
      2: WeekStr := '星期一';
      3: WeekStr := '星期二';
      4: WeekStr := '星期三';
      5: WeekStr := '星期四';
      6: WeekStr := '星期五';
      7: WeekStr := '星期六';
    end;
    // 将星期文本写入数据集(需确保T1有WeekDay字符串字段)
    T1.FieldByName('WeekDay').AsString := WeekStr;
    T1.Post;
    dtCurrentDate := dtCurrentDate + 1;
  end;
end;

关键说明

  1. 替换星期获取对象:把DayofWeek(CalendarView1.Date)改为DayOfWeek(dtCurrentDate),确保每次循环都取当前遍历日期的星期。
  2. 星期数字转文本:Delphi的DayOfWeek返回1到7的整数,对应周日到周六,通过case语句可以转换为易读的星期名称。
  3. 字段准备:如果你的数据集T1没有存储星期的字段,需要先添加一个字符串类型的字段(比如命名为WeekDay)。

内容的提问来源于stack exchange,提问作者fateh djelti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:52:37