So this is a tricky one - here's my take:
First of all let's distinguish between 'tasks that have to happen on a particular day/time' with 'tasks that have to happen by a particular day/time', which is what I think you really are about.
So, embarrassingly, and against a number of sources of advice, my next action list is sorted by the time that the task arrived in the box, newest tasks at the top, oldest at the bottom.
One of my ways of dealing with the inefficiencies that the sort-by-entry-time method causes is to make a rule that everyday I must do the oldest task in the list and I make a general conscious effort to attack the list from the bottom up. This means I've got a 'time-window' in my next actions - I always know that all of the actions have arrived on the list in the last n days, normally this is a around five, right now it's about three. Having this 'sliding window' of next actions has the nice consequence that I know that I'm very likely to get to anything that's needed in the next five days in advance (I also review the list every morning to make sure nothing goes missing) - this nicely takes care of any deadlines further away than this. One of the really nice things about adopting a GTD-like workflow has been that deadlines tend never to get any closer than that and the problem solves itself
If, on the other hand, you get handed something that needs a very fast turnaround - that classic example is a boss giving you something and saying 'do this my tomorrow' - then we have a different problem, and actually my approach is to do it immediately - if I can't do it immediately - then it stays in my (external inbox) - marked unread so it will catch my eye every single time I look at my inbox. Those are the things that really need working on and, by definition, everything else in your stack is not as urgent...