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

如何把日期型經過計算得出數字型

尚未結案
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-27 17:39:53 IP:61.146.xxx.xxx 未訂閱
那麼高手幫我解決以下問題呢??先謝過!! 問題是這樣的: 我想計算一個員工的工齡,得出的工齡如 1.2年(一年二個月). 條件是這樣的: 假如這個員工沒有辭職的話他的工齡 等於當天日期減去入廠日期. 反之辭職日期減去入廠日期. 那麼高手幫幫我啊?? 急!!急!!! ken
------
ken
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-27 18:50:15 IP:219.68.xxx.xxx 未訂閱
linken您好,這類問題在站內已經有相當多的討論了,請參考以下一脫拉庫文章 日期時間的相減 > <> <> <> < > <> < class="code"> =程式是一種藝術 也是訓練自己的分析規劃= =是段落分明 或是雜亂無章= =是一言以敝 或是廢話連篇= =是一目了然 或是艱深難懂= 體會這份藝術 您會了解另一份喜悅與成就
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-29 10:58:00 IP:61.146.xxx.xxx 未訂閱
geniustom多謝你的指引. 可是我現在用的開發工具 是:Delphi5.0 而那個DateUtils 是不是不包含在Delphi5.0里面的. 調用不了喲. 有什麼辦法啊?? 有勞!! ken
------
ken
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-29 15:11:42 IP:219.68.xxx.xxx 未訂閱
linken您好,我寫了個小範例,把DateUtils中會用的的部份抓出來(共三個FUNCTION), 這樣您就不用非得use DateUtils不可了
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;    type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;
  function DaysBetween(const ANow, AThen: TDateTime): Integer;
  function DaySpan(const ANow, AThen: TDateTime): Double;
  function SpanOfNowAndThen(const ANow, AThen: TDateTime): TDateTime;
implementation    {$R *.dfm}    function DaysBetween(const ANow, AThen: TDateTime): Integer;
begin
  Result := Trunc(DaySpan(ANow, AThen));
end;    function DaySpan(const ANow, AThen: TDateTime): Double;
begin
  Result := SpanOfNowAndThen(ANow, AThen);
end;    function SpanOfNowAndThen(const ANow, AThen: TDateTime): TDateTime;
begin
  if ANow < AThen then
    Result := AThen - ANow
  else
    Result := ANow - AThen;
end;    procedure TForm1.FormCreate(Sender: TObject);
var
   D1,D2:TdateTime;
   i:integer;
begin
  D1 := StrToDate( '2003/10/15' );
  D2 := StrToDate( '2004/04/10' );
  showmessage('間隔'+inttostr(DaysBetween(d1,d2))+'天');
end;        end.
另外,如果您想要DateUtils.PAS檔案的話 > <> <> <> < > <> < class="code"> =程式是一種藝術 也是訓練自己的分析規劃= =是段落分明 或是雜亂無章= =是一言以敝 或是廢話連篇= =是一目了然 或是艱深難懂= 體會這份藝術 您會了解另一份喜悅與成就
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-29 15:41:08 IP:203.67.xxx.xxx 未訂閱
日期是TDateTime型態.... StartDate, EndDate: TDateTime; (EndDate - StartDate) / 365 就是你要的了
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-30 07:39:12 IP:61.146.xxx.xxx 未訂閱
geniustom謝謝你的指引, 可是我是一個菜鳥,所以 什麼都不會,我要的是年 和月一起輸入,你算出是 天,雖可以除以30 或31 或29得出月,然之後再除 以12得出年是這樣嗎?? 但好像很麻煩喲!!有沒有 更好更快的方法啊??? ken
------
ken
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-30 09:38:45 IP:219.68.xxx.xxx 未訂閱
linken您好,得出天數後直接除以365就行了ㄚ!如同jimmy_wei所說的,我把它寫的清楚些    
procedure TForm1.FormCreate(Sender: TObject);
var
   D1,D2:TdateTime;
   i:integer;
   str:string;//宣告要輸出的字串
begin
  D1 := StrToDate( '2003/10/15' );       //開始時間
  D2 := StrToDate( '2004/04/10' );       //結束時間
  str:=format('間隔:%1.1f 年',[(D2-D1)/365]);
  //上面這行如果用1.1f是顯示到小數第一位,1.2f顯示到小數第2位
  showmessage(str);
end;
沒有這麼麻煩的吧,再怎麼寫也不會超過10行,而且,您有真的動手USE過 我給你的DateUtils嗎?有試過它提供的方法嗎? 我之前之所以引用DateUtils.DaysBetween(d1,d2)),是因為可以準確的求出天數(包含年及大小月) (直接相減也是一種辦法) 然後你再去求得近一步的處理,直接除以365就得到了, 或是使用DateUtils.MonthsBetween(d1,d2) 直接求出準確的月份(包含月份跟月份之間),然後你在去除12也可以 方法太多了,你自己好好研究吧 GOOD LUCK <> <> <> < > <> < class="code"> =程式是一種藝術 也是訓練自己的分析規劃= =是段落分明 或是雜亂無章= =是一言以敝 或是廢話連篇= =是一目了然 或是艱深難懂= 體會這份藝術 您會了解另一份喜悅與成就
系統時間:2024-07-06 18:12:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!