Susan Harkins
harkins at iglou.com
Fri Aug 1 20:29:35 CDT 2003
I tested several expressions years ago and came up with only one -- based strictly on date arithmetic -- that consistently worked, in any century, with any date, at any time. If you can't find that works for you, I'll be glad to dig it up. Anything that's based on increments or components is bound to fail sooner or later -- but it could fail only on the Tuesday following the year of the Chinese Rat, after the first full moon and only if it rained -- but eventually, they all seem to fail. Susan H. > 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 > >