[UPHPU] mysql date calculation bug

Jim Anderson jim.anderson at techiegroup.com
Mon Oct 15 18:36:12 MDT 2007


Ben Reece wrote:
> Jim Anderson wrote:
>> I have a client base that certain emails must be sent out a various 
>> days befor and after 6 months from the date that they sign up for 
>> service. With that in mind, I created a system that handles the 
>> requirements however, I found this issue this morning. This issue 
>> results in an email getting sent [worst case scenario of] 4x in a row 
>> [1 a day for 4 days.] Best case [error] scenario is only 2x, but 
>> still bad. Don't want to flood one's inbox with frivolity.
>>
>> My fix, considering this snag, is to check the client logs and check 
>> to see is the email was sent within the last 4 days and, if so, don't 
>> send again.
>>
>> I hate this fix as it is clunky and not at all pretty, but I can't 
>> think of another way to do it. If anyone has any suggestions, please 
>> feel free to pipe in.
>>
>> Thanks for asking Ben,
>> -jim
> What if you did it in reverse?  That is, instead of checking if they 
> signed up 6 months ago, check if today is 6 months after their 
> signup?  So instead of the DATE_SUB, you do something like:
>
> WHERE DATE_ADD('2007-02-28', INTERVAL 6 MONTH) = signup_date
>
> That way you'd send out the email on Aug. 28th, but not on the 29th, 
> 30th, or 31st.  Would that work?

A good suggestion. I thought of that as well, but seem to remember 
coming across similar issues. I've had about 15 things in my head 
throughout the day so I may be getting some of my issues/projects 
schmeared though. Do you think doing it that way would skip over anyone? 
I saw that as an unlikely, but possible, concern.

i was thinking something like:

WHERE DATE_ADD(start_date, INTERVAL 6 MONTH) + INTERVAL 45 DAY = CURDATE()

but i haven't had the time to test it out.

to fill out the scenario a bit fuller, the criteria is this:

* 9 different emails. one for each of the following date scenarios.
* six months after sign-up minus 45 days
* six months after sign-up minus 30 days
* six months after sign-up minus 15 days
* six months after sign-up minus 5 days
* six months after sign-up [minus 0 days]
* six months after sign-up plus 15 days
* six months after sign-up plus 30 days
* six months after sign-up plus 45 days
* six months after sign-up plus 60 days

That is the schedule that i have in place.

-jim



More information about the UPHPU mailing list