Set the defer date to the current due date?


I’m trying to automate setting the defer date to the current due date, and then setting the due date to the current due date + 4 hours, however I’ve no idea where to begin. I’ve looked at the Omnifocus dictionary in Script Editor and I can see that there is both a defer date and a due date entry, etc., but it doesn’t actually help me all that much :(

If someone could point me in the right direction (or more!), then I would be very appreciative.

Try this with a selection of tasks

on run

set now to (current date)
set currentTime to time of (current date)
set nowDate to now - currentTime
set theAdvanceDate to nowDate + (4 * days)

tell application "OmniFocus"
	tell content of front document window of default document to ¬
		set theSelectionList to the value of every selected tree
	if the (count of items in theSelectionList) is 0 then return
	tell front document
		repeat with theItem in theSelectionList
			set theNewDefer to the due date of theItem
			if theNewDefer is missing value then
				set theNewDefer to theAdvanceDate
			end if
			set theNewDue to (theNewDefer + (4 * days))
			set the due date of theItem to theNewDue
			set the defer date of theItem to theNewDefer
		end repeat
	end tell
end tell

end run



Thank you so much for this! I just tried it out and it actually sets the due date to be 4 days into the future not hours, but that was easy to go through and fix. I’ll be using this as a spring board for many projects :)

Oh, yes! You did say hours not days. I was wrapping my head around moving the dates and lost that important note.

I suspect with some clever coding the times could be shifted by 4 hours ahead to the nearest whole number increment of hours, i.e. 11:00 am rather than 11:13:25 am. I would leave that to someone more particular than me to code.

Glad that this was of help in any case.


1 Like