As I said in my comment: it's pretty easy to achieve this, by repopulating the to-element when the from value changes. I've set up this quick fiddle that does just that.

Obviously, you'll have to wrap this in a onload handler in real life, but the idea remains the same... Here's a slightly different version of the fiddle's code:

document.getElementById('hoursfrom').onchange = (function()
{
//create closure reference to to element, so there is only 1 DOM query
var toElem = document.getElementById('hoursto'),
vals = (function(max)
{//this just returns an array [0,1,2,3,...,23]
var r = [], i = 0;
while(i <= max)
{
r.push(i++);
}
return r;
}(23));//change 23 to whatever max you need here, and the array will be adjusted
return function(e)
{//this is the actual handler, returned by IIFE
var newVals = vals.slice(parseInt(this.value, 10)),//slice from full vals array, only valid values will be used
//this allows for both from and to to have the same value, if you want to change that:
//var newVals = vals.slice(parseInt(this.value, 10) + 1);
options = '<option selected="selected">Now select a TO value</option>',//adds a default first option
i;
do
{
i = newVals.splice(0,1)[0];
options += '<option value="'+i+'">'+i+'</option>';
}while(newVals.length);
toElem.innerHTML = options;
};
}());

With this code, you can have the to-element populated (or not)... as you want. You might want to look into ways of preserving whatever value the user selected in the to element (if possible). It's not that hard, just use toElem.value prior to setting the innerHTML, and change the options string (options.replace('selected="selected"', '').replace('value="'.toElem.value.'"', 'value="'.toElem.value.'" selected="selected"')) for example...