SYSK 234: WeekDiff = Number of Weeks (full + partial) Between Two Dates
If you need to find out the number of weeks in a month, or the number of weeks between two given dates, and you need to includes partial weeks, not just full weeks as done by the T-SQL datediff(wk, d1, d2) function, then the code snippet below should get you started.
NOTE: To make it a bit more flexible, you can add an argument (firstDayOfWeek) that the caller would need to pass in, instead of assuming that it’s Sunday, as in the code below.
private int WeekDiff(DateTime d1, DateTime d2)
{
int result = 0;
// Get first full week
DateTime firstDayOfFirstFullWeek = d1;
if (d1.DayOfWeek != DayOfWeek.Sunday)
{
result += 1;
firstDayOfFirstFullWeek = d1.AddDays((7 - (int)d1.DayOfWeek));
}
// Get last full week
DateTime lastDayOfLastFullWeek = d2;
if (d2.DayOfWeek != DayOfWeek.Saturday)
{
result += 1;
lastDayOfLastFullWeek = d2.AddDays(-(int)d2.DayOfWeek - 1);
}
// Add number of full weeks
result += (lastDayOfLastFullWeek.Day - firstDayOfFirstFullWeek.Day + 1) / 7;
return result;
}