Bobby Heid
bheid at appdevgrp.com
Fri Aug 1 13:50:43 CDT 2003
Here you go! 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 (jd("02/18/2002") - jd("02/29/1988")) / 365.25 Bobby -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com]On Behalf Of Mark Whittinghill Sent: Friday, August 01, 2003 2:40 PM To: Access Developers discussion and problem solving Subject: Re: [AccessD] Age calculation function Sure, I'd like to see it. Mark Whittinghill Symphony Information Services 612-333-1311 mwhittinghill at symphonyinfo.com ----- Original Message ----- From: "Bobby Heid" <bheid at appdevgrp.com> To: "'Access Developers discussion and problem solving'" <accessd at databaseadvisors.com> Sent: Friday, August 01, 2003 1:37 PM Subject: RE: [AccessD] Age calculation function > Why not convert both to Julian dates and then divide by 365.25? This will > give you years as a decimal number. > > In your example: > > (jd("02/18/2002") - jd("02/29/1988")) / 365.2 > =(2452323.5 - 2447220.5)/365.25 > =5103 /365.25 > =13.9712525667351 years > > If anyone is interested in the code to do this, let me know and I'll post > it. > > > 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 1:49 PM > To: Access Developers discussion and problem solving > Subject: Re: [AccessD] Age calculation function > > > Hi Mark > > > Are you saying 14 and 31 are correct or incorrect? I would think they > are > > correct. If so, using DateDiff with "m" and dividing by 12 will work. I > > think you're saying those values are correct, but if not, I'm confused. > > No no, I say those values are correct. > But I don't quite understand the month-thing ... it will fail in about > 50% of any calculation as it doesn't take the day into account: > > #02/29/1988#, #02/18/2002# > should return 13, not 14. > > I've heard of a couple celebrating their 25 year wedding day 24 years > after their wedding because the wife couldn't count to 25. That is > just fun - they can celebrate it once again at the real date - but for > business applications dealing with pensions, salaries, holidays etc. > getting the wrong age or employment period is mandatory and you have > to use reliable calculation methods. > > /gustav > > > >> You may wish to look up "Age Calc" in the archives around Okt. 2002. > >> > >> Many of the "smart" suggestions will fail for date intervals like: > >> > >> #03/01/1988#, #03/01/2002# > >> is 14 > >> > >> #03/01/1968#, #02/28/2000# > >> is 31 > > _______________________________________________ > AccessD mailing list > AccessD at databaseadvisors.com > http://databaseadvisors.com/mailman/listinfo/accessd > Website: http://www.databaseadvisors.com > _______________________________________________ > AccessD mailing list > AccessD at databaseadvisors.com > http://databaseadvisors.com/mailman/listinfo/accessd > Website: http://www.databaseadvisors.com > > _______________________________________________ AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com