線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1144
推到 Plurk!
推到 Facebook!

如何得到一周的数据?

答題得分者是:小傑克
zhouying82
高階會員


發表:150
回覆:272
積分:189
註冊:2004-03-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-05-18 16:35:35 IP:218.80.xxx.xxx 訂閱
比如今天是5/1星期五,我想得到本周的数据,即5/1-3是一周,但是如果今天是5/18日,那么从18日到24日就是一周,我就想得到整个一周的数据。改怎么做啊?
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-05-18 21:05:49 IP:59.112.xxx.xxx 訂閱
function DayOfTheWeek(const AValue: TDateTime): Word; 
周1 就是1 , 周2就是2 , 從1 到 7 , 7是周日

function DayOfTheMonth(const AValue: TDateTime): Word;
Call DayOfTheMonth to obtain the day of the month represented by a specified TDateTime value. DayOfTheMonth returns a value between 1 and 31.

用這兩個判斷就可以算出來第幾週從幾號到幾號
------
額有朝天骨,眼中有靈光
編輯記錄
小傑克 重新編輯於 2009-05-18 21:09:17, 註解 無‧
zhouying82
高階會員


發表:150
回覆:272
積分:189
註冊:2004-03-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-05-18 22:14:57 IP:222.70.xxx.xxx 訂閱
小舒克,可否帮我列举个代码啊?
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-05-19 03:58:54 IP:59.112.xxx.xxx 訂閱
其實只要兩行判斷式而已

[code delphi]
//顯示 testDay 是從幾號到幾號
procedure TForm1.Button1Click(Sender: TObject);
var testDay,a,b:TDateTime;
begin
testDay := now;
WeekFromDayToDay(testDay , a, b);
ShowMessage(FormatDateTime('yyyy/mm/dd',a) '-' FormatDateTime('yyyy/mm/dd',b));
end;
//
procedure TForm1.WeekFromDayToDay(ADay: TDateTime; var FromDay, ToDay: TDateTime);
var i,j,k:word;
begin
i := DayOfTheWeek(ADay);
j := DayOfTheMonth(ADay);
k := DaysInMonth(ADay);
//避免往前算跨月
if i > j then
FromDay := ADay - j 1
else
FromDay := ADay - i 1 ;
//避免往後算跨月
if (k-j) > (7-i) then
ToDay := aDay (7-i)
else
ToDay := aDay (K-j);
end;
[/code]
------
額有朝天骨,眼中有靈光
編輯記錄
小傑克 重新編輯於 2009-05-19 04:01:58, 註解 無‧
zhouying82
高階會員


發表:150
回覆:272
積分:189
註冊:2004-03-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-05-19 12:02:30 IP:218.80.xxx.xxx 訂閱
首先感谢
小傑克大大的回复,那么晚还给我回答,但是还是有点问题,就是如果跨月的会出问题,比如我选择4/30日,周四,应该是从从4/27-5/3,但是,结果却是显示4/27-4/30日为一周。
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-05-19 12:14:27 IP:59.112.xxx.xxx 訂閱
我看你的敘述還以為你不要跨月
如果你跨月不限制的話更簡單,兩個 if 都不用 K,J 也都不用 , 就直接
i := DayOfTheWeek(ADay);
FromDay := ADay - i 1;
ToDay := aDay ( 7- i );
三行就可以

===================引 用 zhouying82 文 章===================
首先感谢
小傑克大大的回复,那么晚还给我回答,但是还是有点问题,就是如果跨月的会出问题,比如我选择4/30日,周四,应该是从从4/27-5/3,但是,结果却是显示4/27-4/30日为一周。
------
額有朝天骨,眼中有靈光
zhouying82
高階會員


發表:150
回覆:272
積分:189
註冊:2004-03-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-05-19 12:49:10 IP:218.80.xxx.xxx 訂閱
谢谢大大,让我受益匪浅。
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
系統時間:2024-05-17 2:11:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!