Floor
long ticks = date.Ticks / span.Ticks;
return new DateTime( ticks * span.Ticks, date.Kind );
Round (up on midpoint)
long ticks = (date.Ticks + (span.Ticks / 2) + 1)/ span.Ticks;
return new DateTime( ticks * span.Ticks, date.Kind );
Ceiling
long ticks = (date.Ticks + span.Ticks - 1)/ span.Ticks;
return new DateTime( ticks * span.Ticks, date.Kind );