How about this for starters:
ifelse(isrange([duration,0],1-900),15 Minutes,
isrange([duration,0],1-1800),½ Hour or Less,
isrange([duration,0],1-2700),¾ Hour or Less,
isrange([duration,0],1-3600),1 Hour or Less,
isrange([duration,0],1-4500),1¼ Hours or Less,
isrange([duration,0],1-5400),1½ Hours or Less,
isrange([duration,0],1-6300),1¾ Hours or Less,
isrange([duration,0],1-7200),2 Hours or Less,
isrange([duration,0],1-8100),2¼ Hours or Less,
isrange([duration,0],1-9000),2½ Hours or Less,
isrange([duration,0],1-9900),2¾ Hours or Less,
isrange([duration,0],1-10800),3 Hours or Less,
1,Longer than 3 hours)
There's no 'fuzzy', so something that's 1 hour and 1 second long goes in the 1¼ hour group.