Anyone know how to shift dates relatively, en masse?

I’ve used OmniFocus for years for personal tasks and school assignments. I finally started in my field of study recently and am putting OF to some serious use.
My job has me work with several clients at a given time, and I’ve given each client their own project in a ‘Clients’ folder. Many tasks in a client project will have start and due dates based on sessions. For example, a task could be entered under Bob Smith with a defer date of [Session 1] and a due date of [Session 4]. I keep a template project on hold, and copy the contents when I’m assigned a new client. Once we schedule a first session, I manually go through and change the dates for these tasks, making them relative to that first session date. It’s a little tedious and inelegant, but not bad for a one-off thing I have to do for new clients. However, I find myself having to tweak these tasks anytime a session is missed or moved to a different date, not to mention when I notice I hadn’t made a note about a date change! (This template has subtasks nested within several header tasks with names like “Start after 2nd session, due by 6th session” so I can make the shifting a little bit easier, though this clutters the project view.)
Ideally, I’d be able to set start and due dates of [Date of Session 1 + 3 weeks] and be able to modify that referent date so OF can shift the other dependent dates in the project. If the session was moved from Monday to Thursday, it’d be great to just add three days to all the start and due dates of tasks I would cmd+select (or add three days to a referent date and let the dependencies calculate themselves).
Am I looking at pie in the sky? Has anyone else facing a similar workflow found a more elegant solution than manually doing a bunch of shifting of dates whenever a client’s session date changes?

EDIT: Here’s a snapshot of an example client project.

As you can see, tasks are clustered when they have the same start AND due date. That way, if I have to shift the dates because a client had to change their meeting time from Tuesday to Mondays, I can manually change the whole cluster at a time. But that still leaves me clustering these all together and manually changing them constantly.
It’d be fantastic to give each project a “referent date,” and set defer and due dates based on it. I could schedule a task with “r+4 weeks.” If a client were to want to meet a day earlier next session, and keep it as our normal session time, I could change any task in the project by changing the r (referent date) to a day earlier. Or, if a session was skipped outright, I could change r to be a week later, and let remaining tasks change themselves.

I suppose an alternative solution could be to cluster all tasks that involve dates relative to sessions into one cluster, and find a way to select it and say “add 2 days to all dates” or something.

Lose the dates altogether and just assign a new defer date at the end of each session.

Have you looked at OmniPlan? It might be a better fit for stuff like this.

That’s just it; these tasks often do come with externally determined due dates based on sessions.
OmniFocus doesn’t have the sort of spreadsheet nature that would be needed to do what I’m asking. That’s okay, because dedicating a little extra effort to manually change the dates is better than the alternative of designing a spreadsheet I wouldn’t have any confidence in.

I faced a similar situation in a past job in a mental health clinic. Until the routine became more ingrained for me, I created multiple templates for each stage, populated each one as the stages progressed, and then nested the resulting “project” as an action group within the client project. Using templates allowed me to have the templates script calculate dates, fill in other variables, and do the heavy lifting of task creation. As I alluded to above, eventually it became more overhead than I needed, but it was helpful for a while.

Edit: I also went back and forth between folders for clients and projects for stages versus projects for clients with action groups for stages.

In addition to the options suggested already, you may consider a few others.

  • Create an Applescript to handle the process of shifting dates.
  • Use and/or modify one of the existing Applescripts to create templates with “fill-in-the-blank” options.


Mmm, I see how that would be a good idea. You’d have to go in and add to the client project every so often, perhaps leaving tasks at the end of the initial action group to remind you to copy the next stage’s action group. Eh, I guess it’s about the same amount of work my approach requires. As it is, I just set a reminder (via Siri, going into OmniFocus, via Drafts, via whatever works) to rejigger the client’s start and due dates whenever a session is missed or rescheduled.

Thanks for the suggestions. It seems like Applescript can be used to effectively create a project populated with dates based on what I called a ‘referent date.’ But this would not solve my problem of having to go in and manually shift dates as that referent date is in flux over time.

Perhaps you might move your Project up one level. Create it as a client Folder. Then, make each Action Group as a Project. Put all Projects On Hold. Activate the first one (Assessments (first 1-4 sessions). When it is complete, activate the second one. And so forth.

An Applescript could then be written to make this process “automatic”. Alternatively, this process could be easier to manage manually than your current method.

As an aside, I don’t see the need for the sub-structure of Name > New Client Bundle > … Why not just skip the New Client Bundle section and put all Action Groups up one level?


1 Like

Good question! The reason for the seemingly unnecessary layer is to make it easier to cut/paste the template into a new client project when using iOS. I only have a Mac at home, not for work, so I rely on iOS for work much more than the Mac version.

OP as I understand your query you can accomplish everything you want with two things: Chris Suave’s Templates script and Dan Byler’s Defer script.

Take the time to read the documentation for the templates script. As a school principal, I have projects and action groups set up to do the kind of thing you have for your clients: issue report cards on a fixed date, with multiple action groups that have due dates backing away from that date (due minus 10, due minus 5, etc.) and even variable context names that get filled out up front when you run the script. I spent a lot of time to get it just right the first two quarters, but a year and a half later I haven’t hit a single snag.

The defer script is powerful enough to defer start and/or due dates for all selected tasks by an interval of your choosing. A boon when you are in the cut and thrust of task triage.

1 Like