gzmhero(hihihi) 来自CSDN
http://community.csdn.net/Expert/topic/4570/4570422.xml?temp=.9266779
uses DateUtils
procedure TForm1.Button3Click(Sender: TObject);
var
dtBegin,dtEnd,dtTemp:TDateTime;
iDays,iDays1:integer;
iCnt,iCnt1:integer;
iCurWeek,iLastPos:integer;
begin
dtBegin:=StrToDateTime(Edit2.Text)+1;
dtEnd:=StrToDateTime(Edit3.Text);
dtTemp:=dtBegin;
iCnt:=1;
while true do
begin
iDays:=DaysInMonth(dtTemp);
Memo2.Lines.Add('第'+IntToStr(iCnt)+'个月:'+FormatDateTime('yyyy-mm-dd',dtTemp)+'----'+FormatDateTime('yyyy-mm-dd',(dtTemp+iDays-1)));
iDays1:=1;
iCurWeek:=WeekOfTheMonth(dtTemp);
iLastPos:=0;
iCnt1:=1;
while true do
begin
while(WeekOfTheMonth(dtTemp+iDays1)=iCurWeek)do
inc(iDays1);
iCurWeek:=WeekOfTheMonth(dtTemp+iDays1);
if MonthOf(dtTemp+iDays1)<>MonthOf(dtTemp) then
begin
Memo2.Lines.Add(' 本月第'+IntToStr(iCnt1)+'周:'+FormatDateTime('yyyy-mm-dd',dtTemp+iLastPos)+'----'+FormatDateTime('yyyy-mm-dd',(dtTemp+iDays-1)));
break;
end else
begin
Memo2.Lines.Add(' 本月第'+IntToStr(iCnt1)+'周:'+FormatDateTime('yyyy-mm-dd',dtTemp+iLastPos)+'----'+FormatDateTime('yyyy-mm-dd',(dtTemp+iDays1-1)));
inc(iCnt1);
iLastPos:=iDays1;
end;
end;
inc(iCnt);
dtTemp:=incMonth(dtTemp);
if dtTemp>dtEnd then
break;
end;
end;
季度就按照
MonthOfTheYear()来判断分割。1--3,4--6,7--9,10--12,4个区间来分。
周计算,到周五,那显示的时候改下:
if MonthOf(dtTemp+iDays1)<>MonthOf(dtTemp) then
begin
Memo2.Lines.Add(' 本月第'+IntToStr(iCnt1)+'周:'+FormatDateTime('yyyy-mm-dd',dtTemp+iLastPos)+'----'+FormatDateTime('yyyy-mm-dd',(dtTemp+iDays-3)));
break;
end else
begin
Memo2.Lines.Add(' 本月第'+IntToStr(iCnt1)+'周:'+FormatDateTime('yyyy-mm-dd',dtTemp+iLastPos)+'----'+FormatDateTime('yyyy-mm-dd',(dtTemp+iDays1-3)));
inc(iCnt1);
iLastPos:=iDays1;
end;