The point of 86400 is to give a fixed way to calculate the date from gettimeofday(2), allowing people to write code that refers to future dates in the same way as past dates. Using variable-length days makes future dates indeterminate, which would cause no end of mischief for interest rate and billing rate calculations. (Think fraud—allocate the budget for one second before a potential leap second, pay the expenses after the leap second has been added to the table.)