如何得出两个日期间各个季、月、周的开始日期、结束日期?

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值