This is a bit silly. You shouldn't tie arbitrary range units, simply have a price per day with infinite precision. It's quite simple, store a "lastaccess". If the price per day was 1 BTC and the last access was 24 hours ago, then deduct 1 BTC from the advertiser's account. If the last access was only 1 hour ago, then deduct 0.0416 BTC from the advertiser's account.
I agree. Ads being able to displayed instantly is better. I still think charging per hour is ok. What I can implement is if another ad becomes the highest bidder, the previous ad is refunded the remainder of the hour (as he pre paid it) and the new ad pays the remaining minutes of the hour.
The reason I didn't do this yet was because in order to 'refund' the remaining hour I have to change the system so that advertisers pay at the start of the hour and publishers get paid at the end, so that when a refund is needed the publisher can't have cashed out that money. Not hard to implement but I figured getting up the first half of the system to get rid of CPC was essential before people used the site.
In the end this system should work how you describe where you pay for the exact length of you ad. It's just determined in 'hours'.
Thanks again for the feedback.