全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1703
推到 Plurk!
推到 Facebook!

如何计算得到某一天的上个月的25号日期?

尚未結案
hrbshen
一般會員


發表:10
回覆:11
積分:4
註冊:2005-04-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-28 14:10:38 IP:218.9.xxx.xxx 未訂閱
如,如果某一天的日期是2005-06-06, 如何得到这个日期的上个月的25日日期(2005-05-25),又哪此日期或为2005-01-04,上个月的25日日期应该是2004-12-25。如何计算?谢谢。 發表人 -
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-28 15:22:37 IP:218.15.xxx.xxx 未訂閱
您好:只要返回某日期上个月的25日?
procedure TForm1.Button1Click(Sender: TObject);
var
  d, m, y: word;
  NewY,NewM:string;
  TheNewDate: TDateTime;
begin
  DecodeDate(DateTimePicker1.DateTime, y, m, d);
  if m=1 then
    begin
     NewY:=inttostr(y-1);
     TheNewDate:=StrToDateTime('' NewY '-12-25');
     showmessage(DateTimeTostr(TheNewDate));
    end
  else
    begin
     NewM:=inttostr(m-1);
     TheNewDate:=StrToDateTime(inttostr(y) '-' NewM '-25');
     showmessage(DateTimeTostr(TheNewDate));
    end
end;
 
是不是您所要的? ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
hrbshen
一般會員


發表:10
回覆:11
積分:4
註冊:2005-04-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-28 16:11:36 IP:218.9.xxx.xxx 未訂閱
谢谢。 它能够解决我的问题。 VB中有对年、月、日进行加减数的函数。 不知道DELPHI中有没有此类函数? 再次感谢。    
引言: 您好:只要返回某日期上个月的25日?
procedure TForm1.Button1Click(Sender: TObject);
var
  d, m, y: word;
  NewY,NewM:string;
  TheNewDate: TDateTime;
begin
  DecodeDate(DateTimePicker1.DateTime, y, m, d);
  if m=1 then
    begin
     NewY:=inttostr(y-1);
     TheNewDate:=StrToDateTime('' NewY '-12-25');
     showmessage(DateTimeTostr(TheNewDate));
    end
  else
    begin
     NewM:=inttostr(m-1);
     TheNewDate:=StrToDateTime(inttostr(y) '-' NewM '-25');
     showmessage(DateTimeTostr(TheNewDate));
    end
end;
 
是不是您所要的? ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-28 16:34:13 IP:218.15.xxx.xxx 未訂閱
您好:日期为double可以直接进行加减,可参考:
Var
  Date1, Date2: TdateTime;
  DiffDate: Integer;
begin
  Date1 := StrToDate('2004-10-8');
  Date2 := StrToDate('2005-10-8');
  DiffDate := Trunc(Date2)-Trunc(Date1);
  ShowMessage('相差﹕'   IntToStr(DiffDate)   '日');
end;
或:
var i : double;
begin
  i := now - StrToDate('2005-7-20');
  ShowMessage(FloatToStr(i));
end;
或
var
  year,month,day,h,m,s,ms,days:word;
  str1,str2:string;
begin
  str1:='2004-10-8 14:23:55';
  str2:='2008-5-8 23:13:24';
  days:=DaysBetween(strtodatetime(str2),strtodatetime(str1));
  year:=days div 365;
  month:=(days mod 365) div 30;
  day:=(days mod 30);
    
  DecodeTime(strtodatetime(str2)-strtodatetime(str1),h,m,s,ms);  
  showmessage(format('%d年; ',[year]) format('%d月; ',[month]) format('%d日; ',[day]) format('%d小时; ',[h]) format('%d分钟; ',[m]) format('%d秒; ',[s]) format('%d微秒',[ms]));
end;
几个实例,不同的方法。
或YearsBetween(const ANow, AThen: TDateTime): Integer; MonthsBetween(const ANow, AThen: TDateTime): Integer; …… 等 使用上可参考帮助! ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-28 18:34:47 IP:202.62.xxx.xxx 未訂閱
您好﹗    直接使用IncMonth函數﹐參數為正值時表示增加月份﹐參數為負值時表示減少月份﹐求出上月的月份﹐然后再將日期改為25即可﹐以您的要求範例如下﹕
Var
  DT: TDateTime;
  Y,M,D: Word;
begin
  DT := IncMonth(Now, -1);
  DecodeDate(DT, Y, M, D);
  D := 25;
  DT := EncodeDate(Y, M, D);
  ShowMessage(DateToStr(DT);
end;
================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================ 發表人 - cashxin2002 於 2005/07/28 18:46:12
------
忻晟
IunCode
一般會員


發表:0
回覆:4
積分:0
註冊:2005-07-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-29 13:55:10 IP:218.16.xxx.xxx 未訂閱
很简单 设某日期为date1:Tdatetime; 则date1的上个月25日为 FormatDateTime('yyyy-mm-',StrToDate(FormatDateTime('yyyy-mm-',date1) '01')-1) '25'
系統時間:2024-05-20 21:15:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!