Dates and times
Timestamps: <2026-09-23 Wed> active (shows in the agenda) [2026-09-23 Wed] inactive <2026-09-23 Wed 10:00-11:30> time range <2026-09-23 Wed>--<2026-09-25 Fri> date range <2026-09-23 Wed +1w -2d> repeater and warning period
<prefix>s Schedule (SCHEDULED:). A new date removes CLOSED. <prefix>d Deadline (DEADLINE:). <prefix>i. Insert an active timestamp (count: include time; count 16: the current time without a prompt). Right after an existing timestamp, this creates a range. <prefix>i! Insert an inactive timestamp. <C-a> / <C-x> (ctx) Increment / decrement the part under the cursor, like Emacs org-timestamp-change: year, month, day, hour, minute, end time, repeater or warning. The cursor on the character right after a part (a-,:or space) changes that part. On a repeater or warning, the number never goes below 1 (warning: 0) and the unit letter cycles d, w, m, y. Only+Nrepeaters and-Nwarnings are changed, like Emacs. <S-Up/Down> (ctx) Same as <C-a> / <C-x>. On minutes, step by the second value oftime_stamp_rounding_minutes(5) and round to it; a count steps by exactly that many minutes. The end minute of a time range moves by 1. On a bracket, switch the timestamp between active and inactive. Withedit_timestamp_down_means_later, <S-Down> is later and <S-Up> earlier. <S-Right/Left> (ctx) Day +1 / -1. :Org toggle_timestamp_type Switch the timestamp at the cursor between active and inactive (in a range, only that end). <C-c><C-y> Show the length of the range at the cursor, e.g. "2 days 3 hours 30 minutes"; with a count, insert it after the range as2d 03:30(2dfor dates,00:20under a day), replacing an earlier result (org-evaluate-time-range).<d 10:00-12:30>ranges work too (an extension). <C-c><C-x><C-t> Toggle the custom display of timestamps (org-toggle-timestamp-overlays): each timestamp is shown astime_stamp_custom_formats(09/25/26 Fri) with conceal and inline virtual text, inside the brackets, like Emacs; a time-range end (-11:30) and a trailing repeater stay visible.display_custom_times = trueor#+STARTUP: customtimeturn it on; the real text shows in Insert mode (see 'concealcursor'). Timestamps in blocks, fixed-width lines, =verbatim=, ~code~ and#+KEYWORD:lines (except TITLE, SUBTITLE, AUTHOR, EMAIL, DATE) stay as typed, as in Emacs. The formats are Emacsformat-time-stringformats, the first for dates and the second for dates with a time, e.g.{ "%A %d %B %Y", "%A %d %B %Y, %H:%M" }: %a %A %b %B %d %e %m %y %Y %H %I %M %p %j %u %w %U %V %W %G %F %R %T %z %Z ... with the flags-_0^#and a width, in English on every system. Brackets around a format are dropped in the buffer and kept in exports. While the display is on in a buffer, exporting it writes its timestamps with the formats (org-timestamp-translate; a format without brackets exports without them). <CR> On a timestamp: open the agenda for that day.
The calendar Date prompts open a floating calendar. It shows the month (with‹ ›around the title) as six weeks with ISO week numbers, so the days of the neighbouring months fill the grid, dimmed. Weekends are tinted, today is underlined and the selected day is highlighted. Below the grid are the selected date in full, its timestamp and its distance from today ("in 3 days", "yesterday"), then the keys. Withdisplay_custom_times = truethe timestamp is shown intime_stamp_custom_formats(<09/27/26 Sun>,[...]for an inactive timestamp), like the Emacs "=> ..." preview; as in Emacs, a buffer's own toggle or#+STARTUP: customtimedoesn't change it. The keys: h l j k day -1 / +1, week -1 / +1 H L < > month -1 / +1 J K [ ] year -1 / +1 <C-v> <M-v> three months later / earlier: on today when it is within a month of that month, else on its 1st (Emacs calendar) . today i t type a date (see below); a date moved to in the calendar is part of the answer, like Emacs. While typing, the calendar shows the date the answer means ("=> <date>", "(=>F)" when it was taken in the future), like the Emacs overlay (read_date_display_live, default on) T set a time ! show the agenda of the selected date (Emacs: the diary entries); the windows come back when the prompt ends c only in the calendar of:Org goto_calendar: close it and show the agenda from the week of the date (org-calendar-goto-agenda; the key iscalendar_to_agenda_key: "default" isc, false none) i only in that calendar, whenagenda.diary_entry_fileis an Org file: close it and add a diary entry for the date there, as the agenda'sidoes (calendar_insert_diary_entry_key, org-calendar-insert-diary-entry-key);tstill types a date x <Del> remove the date (schedule/deadline) <CR> select <LeftMouse> select the day clicked (<MiddleMouse> too) q <Esc> cancel Withread_date_popup_calendar = false(org-read-date-popup-calendar, or its aliaspopup_calendar_for_date_prompt) date prompts are a plain "Date+time [2026-09-28]: " prompt instead; an empty answer takes the date in brackets.
<C-c>< Insert the date the calendar was last left on (by a date prompt or:Org goto_calendar), today before that; on a timestamp, change only its date, keeping the time, repeater and warning (org-date-from-calendar). A count of 4 (C-u) before the schedule/deadline key removes the date; a count of 16 (C-u C-u) instead asks for a date and sets the warning period (DEADLINE) or delay (SCHEDULED) to the days between it and the entry's date, e.g.<2026-10-10 Sat -5d>. Other counts are ignored, like Emacs.
The colors are highlight groups linked to standard ones, so they follow the colorscheme; override any of them with nvim_set_hl(): OrgCalendarTitle month and year (Title) OrgCalendarArrow ‹ › (Special) OrgCalendarWeekday Mo … Fr header (Comment) OrgCalendarWeekendHeader Sa Su header (Constant) OrgCalendarDay days of the month (Normal) OrgCalendarWeekend Saturdays, Sundays (Constant) OrgCalendarOutside other months' days (NonText) OrgCalendarWeekNumber ISO week numbers (LineNr) OrgCalendarToday today (bold, underline) OrgCalendarSelected the selected day (PmenuSel) OrgCalendarDate the date in full (Function) OrgCalendarTimestamp its timestamp (String) OrgCalendarRelative "in 3 days" (Comment) OrgCalendarSeparator rules (FloatBorder) OrgCalendarKey keys of the hints (Special) OrgCalendarHint their descriptions (Comment)
Date input (like org-read-date)
The typed text is read like Emacs org-read-date-analyze:
"" the default date (the date being changed, or today)
"." "+0" today
+3d -2w +1m +4 relative to today (unit defaults to days)
+2h two hours from now
++3d --1w relative to the default date
fri +2fri -mon next Friday (a weekday name is never today) / in two
weeks / last Monday
2026-10-01 26-10-01 10-01 10/1 10/1/2026 absolute dates
2026-10-01 Thu +1w extra words (a pasted timestamp) are ignored
15 the 15th, this month or the next
15.3. 15.3.2027 dotted day.month[.year]
oct sep 15 15 sep 2027 2027 month names, a year alone
w39 2026-w39-5 w39 fri ISO week (and weekday, default Monday)
14:00 2pm 15h30 24:00 times (combine with any date); 24:00 is the
next day
10:00-11:30 10am-11am 10:00+1:30 time ranges
2026-10-01T10:00 ISO date and time
today tomorrow yesterday now (extensions; Emacs ignores these words)
Dates out of range roll over (feb 30 is March 2nd). With
read_date_prefer_future (default), a day or month without a year is taken
in the future: 15 on the 20th is the 15th of next month; "time" also
moves a past time of today to tomorrow; false completes the date from the
default instead. Before extend_today_until o'clock the default is still
yesterday. Text that cannot be read at all is refused with a warning (Emacs
silently uses the default date).
Changes to SCHEDULED and DEADLINE are logged when log_reschedule or log_redeadline is set (or via the #+STARTUP log keywords); setting the same date again is not logged.