So here's what I've done. It's not 100% automatic as I wanted first, but I'm pretty much set until 2020 with just a now and then manual update.
My Db contains the following fields:
I used Dan Kaplan's Holiday Calculation http://abledesign.com/programs/holiday.php
and modified the output so it looks like this:
INSERT INTO holidays (holiday, occurrence, date_holiday) VALUES ('New Year\'s Day', 'First Day of the Year', '2020-01-01');
INSERT INTO holidays (holiday, occurrence, date_holiday) VALUES ('Martin Luther King Day', 'Third Monday in January', '2020-01-20');
I generated the output until 2020 and copied and pasted it into my Db.
Then I used DATE_ADD and DATE_SUB to fill the date_start and date_end fields.
For instance, for the Holidays falling on a Monday (Memorial Day, President's Day, etc.), I subtract 3 days to get the date_start on the Friday and copy the date_holiday to date_end:
UPDATE holidays SET date_start = DATE_SUB(date_holiday, INTERVAL 3 DAY), date_end=date_holiday WHERE holiday='President\'s Day'
For the other holidays falling on a fixed date, I edit the records manually.
Then when people submit an event, I can do a look up on the date and see if it matches a holiday date range and insert the corresponding holiday into the record.
I hope this helps someone else.