Dipende da come crei il calendario (la tabella insomma): io uso uno script js a cui passo degli array (filtrati per competenza: quelli che hanno rilievo per quel determinato mese) e lui crea il calendario e colora le caselle necessarie.

Partendo da zero, filtrerei, con una query, gli script che hanno
1. data di inizio inferiore a fine mese
o
2. data di fine superiore al primo del mese

creo un array con tutti i giorni del mese, ciclo i risultati della query di prima e metto a TRUE gli elementi dell'array corrispondenti.