Just wondering why you have different fields for DateStart and TimeStart? If they are date and time fields in the database it should be very easy, something like.
SELECT COUNT(*) FROM theTable WHERE DateStart<'$myTimeISO8601' AND TimeStart<'$timePart' AND DateEnd>'$myTimeISO8601' AND TimeEnd>'$timePart';
You can fetch the ISO8601 formatted date and build the time part using php's [man]date[/man] function.
It would be a good idea to put indexes on the DateStart, DateEnd, TimeStart and TimeEnd fields (although I would suggest just using a TimeStart and TimeEnd which includes both the date and time). I can't really give you any more hints on the DB side without knowing what database you're using.