I have never understood why mailboxes and issue trackers make date based searches so difficult. By this I mean why is the task of specifying a date (or range) of records to search for not easier?
For example, to search for emails before a particular date in gmail, you can use before:2018-12-01
or older_than:2d
. It doesn't look particularly hard, but let's say I wanted to search for emails received last week only. I would need to open up a calendar, look up the relevant dates and only then could I enter the right incantation: after:2018-11-25 before:2018-12-01
.
With issue trackers that I have used, the story is not much different except for JIRA.
- Github Issues accepts ISO-8601 dates only e.g.
created:2018-12-01
,created:>2018-12-01
,created:<= 2018-12-01
- Trello seems to accept only relative dates, but is slightly more tolerable as searching for cards created or due this day/week/month is easier e.g.
created:day
,due:month
,due:20
. - Asana doesn't have a pure text based way to specify dates, you have to necessarily use the UI.
- JIRA is better — it allows searching by ISO dates, relative dates (
1w
,2h
,-2d
, etc.), and also has functions likestartOfWeek()
,endOfWeek()
, etc. Searching for issues created last week would look likecreated >= startOfWeek(-1) and created <= endOfWeek(-1)
.
Still, even JIRA leaves a lot to be desired. While date based searches are not the most common activity, they are frequent enough that one has to wonder why no one ever picked up an NLP date parsing library for this. It would be so much nicer if I could just tell gmail to return all emails that were received:"last week"
or something similar.
How deftask handles date based searches
deftask does exactly what I wished these other systems would do.
created:today
returns tasks created todaycreated:monday
returns tasks created last Mondayupdated:"five days ago"
returns tasks updated five days agocreated:"last week"
returns tasks created last weekupdated:january
returns task updated last Januarycreated:"this year"
returns tasks updated from the beginning of the year till now.- ISO based dates like
created:2018-12-01
also work as expected
You can also specify date ranges explicitly using the operators :>
, :<
, :<=
, etc.
created:>november
returns tasks created after the end of Novembercreated:>=november
returns tasks created since the beginning of Novembercreated:>=september created:<"this week"
returns tasks created after beginning of September and before this week
If you want to avoid typing double quotes around multi-word date strings, you can use underscores instead of spaces i.e. created:this_week
will also work. This is especially useful if you use deftask-cli.
Searching dates this way is a breeze – much nicer than the alternatives! If you are a deftask user, go ahead and try it out when searching for your tasks.
deftask uses chronicity to parse natural language dates. Chronicity's documentation has more examples about the kinds of dates or times it can parse.