(Reference Page)
Keyboard Maestro offers a very full featured set of date and time tokens, formats, and calculations.
Date/Time tokens are like text expansion codes that return date/time values as text in the specified format.
The most commonly used token is for returning the current date/time in the format you like:
%ICUDateTime%format%
where format is from the ICU Date/Time codes.
For example, using the Set Variable to Text Action:
Usage | Token and Format | Results |
---|---|---|
ISO/International | %ICUDateTime%yyyy-MM-dd% | 2015-11-28 |
Australia Europe | %ICUDateTime%dd/MM/yyyy% | 28/11/2015 |
United States | %ICUDateTime%EEE, MMM d, yyyy% | Sat, Nov 28, 2015 |
United States | %ICUDateTime%MM/dd/yyyy% | 11/28/2015 |
Use in File Name | %ICUDateTime%yyyy-MM-dd-HHmmssA% | 2015-11-28-15210755267426 |
You can embed most any characters you want with the Format Codes.
For the complete list of codes, see the ICU Date/Time codes.
Some Commonly Used Format Codes
Period | Format Code | Example | Results |
---|---|---|---|
Year | y1) | yy yyyy | 96 1996 |
Month | M | M MM MMM MMMM | 9 09 Sep September |
Day | d | d dd | 2 02 |
Weekday Name | E | EEE EEEE | Tue Tuesday |
AM/PM | a | a a | am pm |
Hour (am/pm) | h | h hh | 7 07 |
Hour (24 hrs) | H | H HH | 19 19 |
Minute | m | m mm | 4 04 |
Second | s | s ss | 5 05 |
Fractional Second (truncates) | S | S SSS | 1 123 |
⚠️ Do not use capital “Y” (year of “Week of Year”) unless you really mean it or you will get oddly strange results at the beginning/end of each year.
Also see Wiki article ICUDateTime token
Date/Time Token/Formula | Example |
---|---|
%ICUDateTime%<format>% Returns Current Date/Time (local) | Get Current Date/Time %ICUDateTime%EEE, MMM d, yyyy% ⇒ Sat, Nov 28, 2015 |
%ICUDateTimePlus%<Quantity>%<TimeUnit>%<format>% Adds to Current Date/Time (local) | Add 3 days %ICUDateTimePlus%3%Days%EEE, MMM d, yyyy% ⇒ Tue, Dec 1, 2015 |
%ICUDateTimeMinus%<Quantity>%<TimeUnit>%<format>% Subtracts from Current Date/Time (local) | Subtract 1 month %ICUDateTimeMinus%1%Months%EEE, MMM d, yyyy% ⇒ Wed, Oct 28, 2015 |
%ICUDateTimeFor%NOW()<+ or –><Seconds>%format% Adds or Subtracts from Current Date/Time (GMT) | Add 1 hour to Current GMT %ICUDateTimeFor%NOW()+ (60*60) %EEE, MMM d, yyyy h:mm% ⇒ Sat, Nov 28, 2015 7:14 |
%ICUDateTimeFor% TIME(<Year>, <Month>, <Day> [, <Hour>, <Min>, Sec>])%<format>% Sets absolute date/time (GMT) | Set absolute date in GMT %ICUDateTimeFor% TIME(2015, 12, 25) %EEE, MMM d, yyyy% ⇒ Thu, Dec 24, 2015 Set absolute date in LOCAL time %ICUDateTimeFor% TIME(2015, 12, 25) - GMTOFFSET() %EEE, MMM d, yyyy% ⇒ Fri, Dec 25, 2015 |
%ICUDateTimePlus%<Formula for Quantity>%<TimeUnit>%<format>% Using functions to calculate date offset. | Get Date for Selected Prior Day Number%ICUDateTimePlus%-(DOW() + 7 - DayNum)%Days%EEE, MMM d, yyyy% If Current Date is Dec 25, 2016, and DayNum is 1: ⇒ Sun, Dec 18, 2016 where “DayNum” is the number of the weekday (can be a Variable) |
where
Since TIME() and NOW() returns the specified date/time in GMT , you can adjust for your local time zone by subtracting the GMTOFFSET() function
– this has been disputed.
NOW()
and TIME()
may be based on local time.
%ICUDateTimeFor% TIME(2015, 12, 25) - GMTOFFSET() %EEE, MMM d, yyyy%
⇒ Fri, Dec 25, 2015
Here are some other date/time related tokens and functions:
[Editor: Plan to put in table with descriptions]
You might expect %ICUDateTimeFor% TIME(2017, 1, 1) %EEE, MMM d, yyyy%
to yield Sun, Jan 1, 2017
.
However, it may yield Sat, Dec 31, 2016
, depending on your local time zone.
Here is why:
So, if you use %ICUDateTimeFor% TIME(2017, 1, 1 , 12, 0, 0) %EEE, MMM d, yyyy%
you will now get the expected result of Sun, Jan 1, 2017
For a more complete discussion on the many different ways to use date and times, see KM dates & times: Notes on anchors, intervals, and translations (Aug 2015), with contributions by @ComplexPoint, @peternlewis, and others.
TBD
If you find any issues, or have any suggestions, concerning this page, please report them to Draft Rewrite of Wiki Dates and Times Article