如何計算某時間段內有幾個星期幾

2022-04-15 05:00:39 字數 2960 閱讀 2923

如何計算某時間段內有幾個星期幾? delphi / windows sdk/api

已知日期a是星期

二、四、日中的一天。求a到b這段日期內共有幾個星期

二、四、日?

function   myfuc(   a,b   :tdatetime;   dw   :integer):integer;  

var  

x,y,z:integer;  

begin  

x   :=   dayofweek(   a   );  

//,於是,非周二四日,則返回-1。  

z   :=   round(   b   -   a   )   mod   7   ;  

if   z+x   <=   7   then  

if   (dw   >=   x)   and   (dw   <=   z+x)   then   y   :=   1   else   y   :=   0  

else  

if   z+x-7   >=   dw   then   y   :=   1  

else   if   (dw   <=   z+x)   and   (dw   >=   x)   then   y   :=   1   else   y   :=   0;  

result   :=   round(   b   -   a   )   div   7       +   y   ;  

end;  

procedure   tform1.button1click(sender:   tobject);   //呼叫函式舉例  

var  

a,b:tdatetime;  

begin  

a   :=   vartodatetime('2006-11-18');  

b   :=   vartodatetime('2006-12-16');  

showmessage(   inttostr(myfuc(a,b,1))   +   '個星期日'   +   #13  

+   inttostr(myfuc(a,b,2))   +   '個星期一'   +   #13  

+   inttostr(myfuc(a,b,3))   +   '個星期二'   +   #13  

+   inttostr(myfuc(a,b,4))   +   '個星期三'   +   #13  

+   inttostr(myfuc(a,b,5))   +   '個星期四'   +   #13  

+   inttostr(myfuc(a,b,6))   +   '個星期五'   +   #13  

+   inttostr(myfuc(a,b,7))   +   '個星期六');  

end;

注意,注掉的那個判斷部分,有個小錯,即:你把那個集合[0,2,4]改為[1,3,5]即可!!  

測試結果:(2006-11-18~2006-12-16)  

4個星期日  

4個星期一  

4個星期二  

4個星期三  

4個星期四  

4個星期五  

5個星期六  

先謝謝lihuasoft(學習低調做人)你的回覆,我所說的"求a到b這段日期內共有幾個星期

二、四、日?"是指總數,不用分開計.下面是我用的方法,請指教。  

procedure   tform1.button1click(sender:   tobject);  

var   i,j,k:integer;  

begin  

i:=daysbetween(vartodatetime(edit1.text),vartodatetime(edit2.text));  

j:=dayoftheweek(vartodatetime(edit1.text));  

k:=i   div   7;  

i:=i   mod   7;  

if   j=2   then   i:=(i+1)div   3  

else   if   j=4   then   i:=(i-1)div   2  

else   if   j=7   then   begin  

if   i>4   then   i:=4;  

i:=i   div   2;  

end;  

j:=k*3+i;  

edit3.text:=   inttostr(j);  

end;

偶能斗膽回一下樓主的貼子,已經感激不盡了,因此樓主不必感謝。而「指教」,偶更不敢當。  

測試了一下樓主的**:2006-12-12(周二)~2006-12-31     結果是:8  

而如果用我的函式:    

var  

a,b:tdatetime;  

begin  

a   :=   vartodatetime(edit1.text);   '2006-12-12'  

b   :=   vartodatetime(edit2.text);   '2006-12-31'  

showmessage(inttostr(   myfuc(a,b,1)+myfuc(a,b,3)+myfuc(a,b,5)));  

end;  

測試結果是:   9  

看到樓主的題目時,我就想:我應該盡可能地寫乙個通用的函式,這個函式要不僅僅只能統計「周

二、周四、週日」,而是應該週幾都能統計。於是我就那樣寫了。  

至於您說的「總和」,無非就用算術上最普通的加法即可解決:myfuc(a,b,1)+myfuc(a,b,3)+myfuc(a,b,5)  

我說的不當之處,望樓主原諒。

噢,對了,我的**是不計a這天的,因這天已知是星期

二、四、日中的了。即b-a後的時間段。

php根據計算某個時間段內包含星期幾的時期

假如從今天開始,我想獲取之後每週包含周一和周二的時間,加起來一共要3天 today 2019 12 17 weeks 1,2 days 3 var dump getweekdays today,weeks,days desc 根據開始時間和每週的週期計算出天數範圍內的所有時間段 param star...

微信小程式 工作時間段選擇 星期幾選擇

1.效果圖如上 需完成時間段的選擇 以及下面的工作日選擇 儲存按鈕為formsubmit提交後台 2.思路 時段用picker跟input 如果沒有佔位字元 則不需要input 工作日選擇用checkbox 多選的樣式用label 將checkbox隱藏 label的選擇後的樣式跟取消的樣式,這裡無...

Java之美 獲取某一時間段特定星期幾的日期

獲取某一時間段特定星期幾的日期 author finder.zhou public class weekdayutil 獲取某一時間段特定星期幾的日期 param datefrom 開始時間 param dateend 結束時間 param weekdays 星期 return 返回時間陣列 pub...