Быстрый алгоритм определения дня недели по дате:
Учтите, что месяц задаётся от 0 (январь) до 11 (декабрь).
Получаемый день недели - от 0 (воскресенье) до 6 (суббота).
unsigned short dayofweek(unsigned short year, unsigned short month, unsigned short day)
{
unsigned short t1, t2, t2r, t3;
const unsigned short m[12] = {0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5};
t1 = year - 2000;
t2 = t1 / 100;
t2r = t1 % 100;
t3 = t1 + (t1 >> 2) - t2 + (t2 >> 2) - 1;
if ( ((t1 & 0x0003 == 0) && ((t2r != 0) || (t2 & 0x0003 == 0))) && (month < 2) ) t3--;
return (t3 + m[month] + day) % 7;
}
Алгоритм неоднократно проверялся