Natural Language Dates (Revived)

approved

by amato21

Forked from Natural Language Dates

Auto-complete dates and times naturally (@today, @dans 20 min). Now with multilingual support and hybrid links. - This plugin has not been manually reviewed by Obsidian staff.

β˜… 12 stars↓ 5,820 downloadsUpdated 2d agoMIT

Natural Language Dates (Revived) 🌍

This is a revived and improved version of the popular "Natural Language Dates" plugin for Obsidian. It brings the plugin back to life with a modern engine, true multilingual support, and smarter time handling.


Supported Languages

Enable any combination in Settings β†’ Natural Language Dates β†’ Language settings. All examples in this README use English, but every feature below works the same way in each of these:

LanguageStatus
EnglishFull support
FrenchFull support
SpanishFull support
ItalianFull support
RussianFull support
UkrainianFull support
Chinese (Traditional & Simplified)Partially supported
GermanPartially supported
PortuguesePartially supported
JapaneseFull support
KoreanPartially supported
DutchUnder development

You can enable several languages at once β€” the autosuggest and parser understand all of them simultaneously.

Korean support (였늘, 내일, λ‹€μŒ μ£Ό μ›”μš”μΌ, 3일 ν›„...) reuses vocabulary from CreamNuts' nldates-obsidian-korean β€” many thanks for that work. As with the other "partially supported" languages, chrono-node has no Korean parser to fall back on, so some combined phrasings (e.g. a weekday together with a specific time, or date ranges) aren't recognized yet (#40).


How to Install

Via Obsidian Community Plugins (Recommended)

  1. Open Settings β†’ Community plugins in Obsidian.
  2. Click Browse and search for "Natural Language Dates (Revived)".
  3. Install and enable it.

Via BRAT (for the latest beta builds)

To get updates ahead of the official release, use the BRAT plugin:

  1. Install BRAT from the Community Plugins store.
  2. Add a Beta Plugin with this URL: https://github.com/Amato21/nldates-revived
  3. Enjoy!

Usage

Date Autosuggest

Type @ (default trigger) followed by a natural date.

  • @today β†’ [[2024-12-30]]

  • @tomorrow β†’ [[2024-12-31]]

  • @in 20 minutes β†’ 14:30 (smart formatting: only time when it's today!)

  • @in 2 hours β†’ 16:30 (smart formatting for today)

  • @in 2 weeks and 3 days β†’ [[2025-01-22]] (full date for future dates)

  • @next Monday at 3pm β†’ [[2025-01-06]] 15:00

  • Weekday shortcuts:

    • @Monday β†’ next Monday (or today if it's Monday)
    • @this Monday β†’ Monday of the current week (even if already elapsed)
    • @last Monday β†’ Monday of the previous week
    • @next Monday β†’ Monday of the next week
    • Abbreviations also work: @mon, @tue, @wed, @thu, @fri, @sat, @sun
  • @3 minutes ago β†’ 14:27 (past expressions, in every supported language)

  • @2 hours ago β†’ 12:30

  • @from Monday to Friday β†’ [[2025-01-06]], [[2025-01-07]], [[2025-01-08]], [[2025-01-09]], [[2025-01-10]]

  • @next week β†’ [[2025-01-06]], [[2025-01-07]], [[2025-01-08]], [[2025-01-09]], [[2025-01-10]], [[2025-01-11]], [[2025-01-12]]

  • Complex date expressions:

    • @the 15th of next month β†’ [[2025-02-15]]
    • @last day of month β†’ last day of the current month
    • @last day of next month β†’ last day of next month
    • @first Monday of month β†’ first Monday of the current month
    • @first Monday of next month β†’ first Monday of next month
    • @last Friday of next month β†’ last Friday of next month
    • Works with all prefixes (next, last, this) and their translations in every supported language
  • Time shortcuts: type the word for "time" in one of your enabled languages to see quick time-adjustment suggestions β€” @Time in English, @heure in French, and so on for each language:

    • Time:Now β†’ inserts the current time (e.g. 14:30)
    • Time:+15 minutes / Time:+1 hour β†’ time 15 minutes / 1 hour from now
    • Time:-15 minutes / Time:-1 hour β†’ time 15 minutes / 1 hour ago
    • These insert just the time, with no date or link β€” handy for logging timestamps
    • Only works for a language you've actually enabled in settings β€” @Time won't trigger anything if only French is enabled, only @heure will

Each suggestion in the dropdown shows a preview of the resolved date or time next to it (e.g. typing @next monday shows "Next Monday" with 2025-01-06 beside it), so you can see exactly what will be inserted before you pick one.

Press Shift + Enter to keep the original text as an alias (e.g. [[2024-12-30|today]]). If you type the full word yourself, the alias keeps your exact casing instead of the suggestion's own β€” handy in languages where the dictionary form is capitalized (French Demain, for instance) but you'd rather see it lowercase in your note. Only completing a partial word falls back to the suggestion's own spelling.

Obsidian_ldWoN5Xnt8

Commands (Ctrl/Cmd + P)

  • Parse natural language date: Replaces selected text with a link (e.g. select "tomorrow" -> becomes [[2024-12-31]]).
  • Insert the current date and time: Quickly insert a timestamp with both date and time.
  • Insert the current date: Inserts only the current date.
  • Insert the current time: Inserts only the current time.
  • Date Picker: Opens a calendar view to pick a date visually.

Configuration

Go to Settings > Natural Language Dates:

  • Languages: Check the languages you want to enable.
  • Date Format: How the date part looks (e.g. YYYY-MM-DD).
  • Time Format: How the time part looks (e.g. HH:mm).
  • Separator: Character between date and time (if used).
  • Smart Suggestions: Enable intelligent suggestions (enabled by default)
    • Enable smart suggestions: Master toggle for all intelligent features
    • History-based suggestions: Learn from your frequently used date patterns. Ranking favors what you've picked recently, not just most often overall β€” something you used a lot months ago naturally fades if you haven't reached for it lately, while anything you reuse jumps back to the top.
    • Context-based suggestions: Detect dates already mentioned in the current document (within Β±10 lines of the cursor) and suggest them
    • Manage history: Opens a list of everything in your suggestion history (most relevant first), with a button to remove any single entry, plus a "Clear all" option (armed on the first click, applied on the second, so it can't be triggered by accident)
  • Date Formatting:
    • Omit date for short relative expressions: When enabled, short relative expressions for today (e.g., @in 15 min, @in 2 hours) will display only the time (e.g., 14:30) instead of [[2024-01-15]] 14:30 (enabled by default)
  • Periodic Notes: Optional formats for linking to weekly/monthly/quarterly/yearly notes (e.g. used by the Periodic Notes plugin), each empty/disabled by default:
    • Week format (e.g. GGGG-[W]WW), Month format (e.g. YYYY-MM), Quarter format (e.g. YYYY-[Q]Q), Year format (e.g. YYYY)
    • When set, an expression that resolves to a whole period instead of a single day β€” @next week, @this quarter, @Q3, @Q3 2026, @2026-W02 β€” uses that format instead of the daily Date format. Leave a field empty to keep using the daily format for that granularity (and, for weeks specifically, the existing behavior of inserting a link for every day of the week).
    • Recognized in all 12 supported languages: @next week/@semaine prochaine/@ζ₯ι€±/@λ‹€μŒ μ£Ό, etc.

Note: History data is stored in .obsidian/plugins/nldates-revived/history.json and is limited to the 100 most relevant entries for optimal performance.

URI Action

Open (or create) a daily note from outside Obsidian β€” e.g. from a Shortcuts automation, a script, or another app:

obsidian://nldates?day=tomorrow&newPane=yes

day accepts any natural language expression the plugin understands. newPane (yes/no, default yes) controls whether the note opens in a new pane.


πŸ”§ For Developers

Building an integration against the plugin's TypeScript API? See API.md for the complete reference: accessing the plugin instance, all public methods and types, and usage examples.


πŸ™ Credits & Acknowledgements

This project stands on the shoulders of giants. Huge thanks to:

Powered by the chrono-node library.


Changelog

See CHANGELOG.md for the full version history.


Development Troubleshooting

If npm install fails with an ENOTEMPTY rename error, remove node_modules/ and retry. If you see 403 Forbidden while fetching packages, confirm that your registry access is allowed by your network or security policy before retrying. This helps avoid stalled installs when running the project locally. Keep any local install logs out of version control.


Maintenance & Community

This project is open source (MIT License). The primary goal is to provide a working, reliable tool for the Obsidian community.

Community First: If this repository becomes inactive or unmaintained in the future, please feel free to fork it and take over maintenance immediatelyβ€”no permission needed! The community's needs come first, and we'd be delighted to see the project continue to evolve and improve.

Your contributions, forks, and improvements are always welcome! πŸš€

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.