Good that you achieved a working command using native actions.
Personally, I tend to use inline functions to deal with math that involves time, as that allows the use of the .NET TimeSpan class (while DateTime, the underlying class for the VoiceAttack Date/Time variable type, represents a given point in time, TimeSpan represents a duration), E.G.
Inline C# Function: Calculate delta to departure, wait until execution finishes
Set text [~formatString] to 'HH : mm : ss'
Say, 'Countdown {INT:minutesToDeparture} minutes {INT:secondsToDeparture} seconds'
Write (overwrite), 'Time now is: {DATETIMEFORMAT:~dateTimeFormat}\r\nDeparture time: {DATETIMEFORMAT:EliteAPI.CarrierJumpRequest.DepartureTime:~dateTimeFormat}\r\nCountdown {I...
where "Calculate delta to departure" contains
using System;
public class VAInline
{
public void main()
{
DateTime departureTime = VA.GetDate("EliteAPI.CarrierJumpRequest.DepartureTime") ?? DateTime.MinValue;
if (departureTime == DateTime.MinValue)
{
VA.WriteToLog("\"EliteAPI.CarrierJumpRequest.DepartureTime\" has not been set", "red");
return;
}
TimeSpan deltaToDeparture = departureTime - DateTime.Now;
VA.SetInt("minutesToDeparture", deltaToDeparture.Minutes);
VA.SetInt("secondsToDeparture", deltaToDeparture.Seconds);
}
}
And the "Write Text to a File" action at the end contains
Time now is: {DATETIMEFORMAT:~formatString}
Departure time: {DATETIMEFORMAT:EliteAPI.CarrierJumpRequest.DepartureTime:~formatString}
Countdown {INT:minutesToDeparture} minutes {INT:secondsToDeparture} seconds
Note that the output will be zero-padded (E.G. "00 : 01 : 01"). If you'd prefer it as in your example (E.G. "0 : 1 : 1"), use "H : m : s" as the format string instead.