I think I understand your point now. Here's a demo I had to make to realize what you mean with OR sorting:
TL;DR;
Summing up that general advise:
- use core date formats for custom date fields
- whether or not a date is all day is computed by the length of the entered date, not a suffix
- a due date should always be later than a scheduled date
- the other case should only occur when you're overdue
- your examples seem to demonstrate that
- for this reason, your sorting should always take the due date when you're overdue
- even if you want a scheduled date to take precedence
Truly, this date handling stuff for GTD-style planing is anything but trivial.
There is a loooong list of issues around this and that is why there are things like MGSD, GSD5, etc...
- your problem is not only about some filter that can sort by, say a scheduled date and only then a due date
- as you say: I want both fields on a single list, where it is sorted by date.
- well, there is no such "date" (field) to sort by: the date you refer to is temporarily computed
- you not only want one field should the other not exist, you possibly also want to sort by always the lower of both!
- interestingly, if the due date was before the scheduled date, then you did some mis-planning
- this should only be the case for tasks that are overdue, and so they should possibly always be up top
- i.e. the due date here should take precedence because it is before the scheduled date
- I'd prefer a separate "overdue" list where only those where due < today && scheduled < today are shown
- and I don't think there's a filter for that
- so, you really have 3 dates:
- optionally, a due date — when to hand something in (may not exist)
- if today is past the due date, we're overdue
- optionally, a scheduled date — when to do something
- if this was ever after the due date, then we're doing some awkward "overdue management"
- in other words, this should only occur if we're already past the due date
- a "target date"
- being computed, not manually entered
- and then I am not so sure what to do, because...
- when you're overdue, where do you show these items?
- at the due date?
- at some even more overdue scheduled date?
- imho, they should not be on the same task list but be a separate list of overdue items
- sorted by whatever you want, possibly switchable
- by default, sort by due date, but allow to switch to sort by scheduled date
- if you want them on your main task list, overdue should always be up top, in red
- which field should take precedence?
- possibly the scheduled field since...
- if we took the due field, then we'll not properly sort by how things are scheduled
- however, if we're overdue, then we should possibly sort by due date
- this is why overdue needs to be separate from the main list
- it's also why mixing due and scheduled is confusing, make it two lists!
- however, you possibly not only want this sorted by target date
- chances are, you should also (always) display the "target date"
- at least indicate which of your date fields actually is your target date
- and also show the other date, if present
- perhaps you could simply make the field that is your target date bold
- this would currently require six states, one to check if the field exists and a flag as to whether it's the target date
- [if we have a due date: <not being the target date> / <being the target date> ]
- [if we have a scheduled date: <not being the target date> / <being the target date>]
- we cannot, currently, tell the sort filters where to put empty items
- meaning: tiddlers that either don't have a due field or a scheduled field
- this is problematic, because in this case, we possibly always want them last, not first
- if there was no scheduled field, they are somewhat "unscheduled", although due
- if there was no due field but a scheduled field they should sort just fine
- assuming that the scheduled field is generally what we sort by
- i.e. "when to next work on what"
- so, I opened an issue for that:
#2137 sort filters and empty value position
https://github.com/Jermolene/TiddlyWiki5/issues/2137
With all of the above complexity, here's why I much prefer and advocate reminder tiddlers (and why we have GTD editions)...
- for me, reminders should be their own tiddlers with a date, consciously set
- they should relate to a task tiddler either via tagging or a reference field
- a due date would perhaps be set at the tiddler to which the reminder relates
- the moment you set the due date, you may actually want to "schedule" a reminder
- otherwise the task is unscheduled
- alternatively, a due date could and perhaps should be a special form of a reminder tiddler that has a given tag or field set
- if you deleted a tiddler for which you have reminders, then that reminder is in limbo
- then you use different lists for your task tiddlers
- scheduled:
- tiddlers having an associated reminder at all
- sorted by urgency, i.e. by how close the reminder date is with respect to today
- using color to hint at the delta between now and the reminder date, overdue being red
- unscheduled
- tiddlers sorted by due date that have no reminders associated
- so, you do not try to make one big messy list, but instead...
- consciously look at things with respect to whichever sequence is most important
- if there is something overdue, always check first
- if you have unscheduled tasks, see if you want to do some scheduling
Personally, I think this the pattern for how a reminder list should look, overdue being red and today being 2015-12-18:
2015-12-15 foo (due: 2015-12-18)
do something
8:00 2015-12-16 bar (due: 2015-12-20)
do another thing with loads of text
mooooaaaaar text
and then some
14:00 2015-12-18 baz
also do this
So,
foo,
bar,
baz and
mumble would be task tiddlers but the dates to the left are actually dates stored at distinct reminder tiddlers and the reminder text, should one be defined, is the reminder tiddler's text. Because, for one, you can have a number of reminders per task tiddler, not just one.
If due dates were also reminder tiddlers, then the list would look like this:
2015-12-15 foo (due: 2015-12-18)
do something
8:00 2015-12-16 bar (due: 2015-12-20)
do another thing with loads of text
mooooaaaaar text
and then some
2015-12-18 foo (due)
go celebrate!
14:00 2015-12-18 baz
also do this
14:00 2015-12-20 mumble
2015-12-20 bar (due)
Now, go hand it in!
So much for reminders and dates. :D