[AccessD] Age calculation function

Bobby Heid bheid at appdevgrp.com
Mon Aug 4 07:27:07 CDT 2003


LOL.

Sorry, was trying to get out of the office for the weekend.

What I was saying is that technically, a day is not over until the time has
reached OVER 24 hours, same for a year.  Looking visually at the calendar,
12:00am to 9:00pm is one day.  But if you do the math, it is only 21 hours,
which is only 75% of a day.

So, using your dates (03/01/1992-03/01/1987), looking at the calendar, it is
easy to see that it should be 5 years.  But until you reach that 1st second
on 03/01/1992, you have not really used up that last full day.  That is why
my original code did not work.

Any clearer now?

Bobby

-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com]On Behalf Of Gustav Brock
Sent: Saturday, August 02, 2003 5:02 AM
To: Access Developers discussion and problem solving
Subject: Re: [AccessD] Age calculation function


Hi Bobby

I tried to think but I'm not quite sure I can follow you. Only newly
born babies and astrologers care for the time of the day of birth, and
only children are interested in ages with a resolution of months. And,
of course, a new day begins at midnight.

/gustav


> Good point!  I did not think that you were picking on me.

> While thinking about this, you technically have to add 0.0001 (may could
go
> smaller) day.  

> Think about it

> 12/1/99-12/1/99 is technically saying the same as 
> 12/1/99 12:00am 0 12/1/99 11:59:59pm, which IMHO is not 1 full day until
> that last second has past (and then it is the next day).

> When you are using my method, I think that maybe you have to add 0.0001
days
> to get the desired results.

> I modified the function to take a fraction of a day and entered .0001 as
the
> fraction to add and I get:

> Debug.Print (Greg2JD("03/01/1992",0)-Greg2JD("03/01/1987",0.0001))/365.25=
> 5.00205311425984 

> What do you all think?

> Bobby

> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com
> [mailto:accessd-bounces at databaseadvisors.com]On Behalf Of Gustav Brock
> Sent: Friday, August 01, 2003 3:29 PM
> To: Access Developers discussion and problem solving
> Subject: Re: [AccessD] Age calculation function


> Hi Bobby

>> This function can be made even more generic by passing in the month, day,
>> year, and day fraction (or the day as a fraction 12/4/2003 6:00AM would
be
>> 12, 4.25, 2003).  This way, the function can handle years BC.

>> Just in case anyone cared.  :-)

> Well, could be interesting ... who knows, but it still fails an
> example like this:

> ? (Greg2jd("03/01/1992") - Greg2jd("03/01/1987")) / 365.25
>  4,99931553730322

> like any other method relying on dividing by 365,25. This method is
> what we call a "shoemaker method" as it is a method working in "most
> cases" but not all.

> This is not to pick on you - because it is still published many places
> - but for the records, so no list member should be tempted to use a
> quick and dirty suggestion for serious use.

> /gustav


>> Public Function Greg2JD(ByVal strDate As String) As Double
>> Dim A    As Long
>> Dim B    As Long
>> Dim MM   As Long
>> Dim YY   As Long
>> Dim DD   As Single

>>    MM = Month(strDate)
>>    YY = Year(strDate)
>>    DD = Day(strDate)
   
>>    'note, you could pass the time of day in as a fraction of a day.
>>    'if you do so, simply add the fraction of the day to DD
>>    'As is, this code assumes 0 hour, i.e. if it is the 4th,
>>    'then it assumed to be the 4th at 12:00:00 AM
>>    'DD = DD + sDayFrac     'sDayFrac is the variable holding fraction of
>> day

>>    If MM < 3 Then
>>       YY = YY - 1
>>       MM = MM + 12
>>       End If

>>    A = YY \ 100         'integer math
>>    B = 2 - A + A \ 4    'integer math

>>    Greg2JD = Int(365.25 * (YY + 4716)) + Int(30.6001 * (MM + 1)) + DD + B
> -
>> 1524.5
   
>> End Function

>> To work out our example, I called it with:
>> Debug.Print (Greg2JD("02/18/2002") - Greg2JD("02/29/1988")) / 365.25

_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com


More information about the AccessD mailing list