Free Lessons
Courses
Seminars
TechHelp
Fast Tips
Templates
Topic Index
Forum
ABCD
 
Home   Courses   Index   Templates   Seminars   TechHelp   Forums   Help   Contact   Join   Order   Logon  
 
Tips & Tricks

New Tips Added Weekly!
Click here to get on our Mailing List

   
 

Microsoft Access Date Functions

Using DateDiff and DateAdd to Determine Differences in Dates

Q: I need to calculate the number of months a person has been alive, but here's the interesting part... if the person was born before the 15th day of the month, I need to give them "credit" for that whole month, otherwise I need to assume they were born on the first of the following month. So, for example, someone born on 1/4/90 would be calculated from 1/1/90, and someone born on 1/16/90 would be assumed born 2/1/90. Make sense?

A: Interesting problem. There are a couple of ways you could do this. Normally, you can just calculate a "close enough" number of months someone was alive by just subtracting the current date from their birth date and dividing by 30. Of course, I've rounded the answer to 0 decimal places.

MonthsAlive: Round((Date()-[DOB])/30,0)

Assuming today is 3/25/2008, that would produce OK results...

 

A better way to do it would be to use the DateDiff function to get an exact number of months difference between the two dates:

MonthsAlive: DateDiff("m",[DOB],Date())

 

This gives you slightly different results, but they're more accurate because DateDiff will take actual months into consideration - which ones are 30 days, 28 days, 31 days, etc.

 

Now let's deal with your special condition. You need to say if someone was born before the 15th, assume they were born on the 1st of that month. Otherwise, the 1st of the next month. So, let's figure out what DAY of the month they were born on with the Day() function. I'll call this field my Effective Day, or EffDay for short.

EffDay: Day([DOB])

 

Now we can figure out the effective date of the start of their birth month, which I'll call EffThis. This is an odd calculation. I'm essentially subtracting a number of days from their birthdate equal to the day of the month they were born on (so 19 days from 1/19/90, for example). Then I'm adding 1 day to it (because 19-19 is zero... and we need the 1st). Since I'm subtracting but using the DateAdd function I have to multiply by -1 (there is no DateSubtract function).

EffThis: DateAdd("d",-1*[EffDay]+1,[DOB])

 

Now it's easy to calculate the first day of the following month, which I'll call EffNext. Just add one month to the EffThis date.

EffNext: DateAdd("m",1,[EffThis])

 

Next, with a little IIF function, you can tell the query which date to use for their effective date of birth, or EffDOB by looking at the day of the month they were born on. In English, this says "if the day of the month is less than 15, then the effective date of birth is EffThis, otherwise it's EffNext."

EffDOB: IIf([EffDay]<15,[EffThis],[EffNext])

 

Finally, you can use the DateDiff function again to take the difference in months between today and their effective date of birth.

MonthsOld: DateDiff("m",[effdob],Date())

 

There ya go. It's not hard finding the difference between two dates, but that little special clause of yours is what makes this example tough to do.

>>> Also, see my other Tip on calculating date and time differences.

 

 

 


By Richard Rost   Richard Rost on LinkedIn Email Richard Rost
Click here to sign up for more FREE tips

 

 

 

The following is a paid advertisement
Computer Learning Zone is not responsible for any content shown or offers made by these ads.
 

Learn
 
Access - index
Excel - index
Word - index
Windows - index
PowerPoint - index
Photoshop - index
Visual Basic - index
ASP - index
Seminars
More...
Customers
 
Login
My Account
My Courses
Lost Password
Memberships
Student Databases
Change Email
Info
 
Latest News
New Releases
User Forums
Topic Glossary
Tips & Tricks
Search The Site
Code Vault
Collapse Menus
Help
 
Customer Support
Web Site Tour
FAQs
TechHelp
Consulting Services
About
 
Background
Testimonials
Jobs
Affiliate Program
Richard Rost
Free Lessons
Mailing List
PCResale.NET
Order
 
Video Tutorials
Handbooks
Memberships
Learning Connection
Idiot's Guide to Excel
Volume Discounts
Payment Info
Shipping
Terms of Sale
Contact
 
Contact Info
Support Policy
Mailing Address
Phone Number
Fax Number
Course Survey
Email Richard
[email protected]
Blog RSS Feed    YouTube Channel

LinkedIn
Copyright 2024 by Computer Learning Zone, Amicron, and Richard Rost. All Rights Reserved. Current Time: 3/28/2024 9:56:20 AM. PLT: 0s