Creating Complex Timer

I need to track the time between when a record is created and when its “Status” field changes to “Complete”. I have several criteria:

  1. It should only calculate time between Monday and Friday, excluding time on Saturday and Sunday
  2. It should only calculate time between the hours of 8am and 6pm
  3. If the “Status” field changes to “On Hold”, it will exclude the time the record is in this status

Does anyone know how to accomplish this, happy to connect outside the forums, need a solution ASAP!

Thanks in advance!