Excel’de yıl, ay, gün olarak yaş hesaplama

Excel’de iki tarih arasındaki farkı yıl, ay,gün olarak hesaplamanız gerekebilir.

Yukarıdaki gibi bir hesaplama yapmak için

Yıl hesaplaması için C2 hücresine:

=YIL(B2)-YIL(A2)-EĞER(YADA(AY(B2)<AY(A2);VE(AY(B2)=AY(A2);GÜN(B2)<GÜN(A2)));1;0)

Ay hesaplaması için D2 hücresine:

=AY(B2)-AY(A2)+EĞER(VE(AY(B2)<=AY(A2);GÜN(B2)<GÜN(A2));11;EĞER(VE(AY(B2)<AY(A2);GÜN(B2) >=GÜN(A2));12;EĞER(VE(AY(B2)>AY(A2);GÜN(B2)<GÜN(A2));-1)))

Gün hesaplaması için E2 hücresine:

=B2-TARİH(YIL(B2);AY(B2)-EĞER(GÜN(B2)<GÜN(A2);1;0);GÜN(A2))

Resimdeki excel dosyasını indirmek için tıklayın!

http://support.microsoft.com/kb/214094/tr

İki tarih arasındaki farkı Yıl, Ay, Gün olarak bulmak.

İki tarih arasında geçen zamanı bulmanız, yaş hesaplamanız gerekebilir. Oracle’da iki tarih arasındaki farkı yıl, ay,gun olarak  veren fonksiyon bulunmamaktadır.

Ben aşağıdaki şekilde bir sql ile hallettim: 

SQL>SELECT
  DOG_TAR DOGUM_TARIHI,
TRUNC( MONTHS_BETWEEN( SYSDATE, dog_tar)/12) yil,
TRUNC( MOD( MONTHS_BETWEEN( SYSDATE, dog_tar),12) ) ay,
TRUNC( (MONTHS_BETWEEN(SYSDATE,dog_tar)- TRUNC(MONTHS_BETWEEN( SYSDATE, dog_tar))) /0.032258064516129) gun
FROM
  PERSONEL; 


DOGUM_TARIHI        YIL         AY        GUN
------------ ---------- ---------- ----------
11.04.1970           39          9         24
01.01.1960           50          1          3
01.01.1998           12          1          3
04.08.1997           12          6          0
13.02.1982           27         11         22

0.032258064516129 iki gün arasındaki fark.

SQL>SELECT MONTHS_BETWEEN( SYSDATE,SYSDATE-1) FROM DUAL;

MONTHS_BETWEEN(SYSDATE,SYSDATE
------------------------------
             0,032258064516129

İki tarih arasındaki farkı yıl,ay,gün,hafta olarak hesaplayan fonksiyon.

CREATE OR REPLACE FUNCTION "TARIH_HESAPLA"(BAS_TARIH DATE, BIT_TARIH DATE,FORMAT
   VARCHAR2 DEFAULT '%YIL% yil %AY% ay %AYGUN% gun')
   RETURN VARCHAR2 DETERMINISTIC IS
   SONUC VARCHAR2(100) ;
   FARK NUMBER;
BEGIN
   -- %YIL% : Iki tarih arasindaki fark yil olarak
   -- %AY% : Iki tarih arasindaki fark ay olarak
   -- %AYGUN% : Iki tarih arasindaki fark aydan kalan gun olarak
   -- %HAFTA% : Iki tarih arasindaki fark hafta olarak
   -- %HAFTAGUN% :Iki tarih arasindaki fark haftadan kalan gun olarak
   SONUC := FORMAT;
   FARK:=months_between(BIT_TARIH, BAS_TARIH);
   SONUC := REPLACE(SONUC,'%YIL%',trunc(fark / 12));
   SONUC := REPLACE(SONUC,'%AY%',trunc(mod(fark, 12)) );
   SONUC := REPLACE(SONUC,'%AYGUN%',trunc( (fark - trunc(fark) ) / 0.032258064516129));
   SONUC := REPLACE(SONUC,'%HAFTAGUN%',TRUNC(mod(BIT_TARIH-BAS_TARIH,7 )));
   SONUC := REPLACE(SONUC,'%HAFTA%',TRUNC( (BIT_TARIH-BAS_TARIH)/7 ));
   RETURN SONUC;
END;

Örnek:

SQL> select tarih_hesapla(sysdate-999,sysdate) from dual;

TARIH_HESAPLA(SYSDATE-999,SYSD
------------------------------
2 yil 8 ay 25 gun


SQL> select tarih_hesapla(sysdate-999,sysdate,'%YIL% Yil') from dual;

TARIH_HESAPLA(SYSDATE-999,SYSD
------------------------------
2 Yil


SQL> select tarih_hesapla(sysdate-100,sysdate,'%HAFTA% Hafta %HAFTAGUN% Gün') from dual;

TARIH_HESAPLA(SYSDATE-100,SYSD
------------------------------
14 Hafta 2 Gün