7.4 KiB
DateTime Natural - Technical Reference
For Claude Code
This reference is for technical details only. When you need to work with dates/times:
- DO NOT invoke slash commands (
/datetime:parse,/datetime:now,/datetime:calc) - DO use the
datecommand directly via Bash tool as shown in examples below
The slash commands are for users only. This reference provides the command patterns you should use directly.
GNU date Command Reference
The date command is a native Linux utility that parses natural language date/time expressions without requiring external dependencies.
Basic Syntax
date [OPTION]... [+FORMAT]
date -d STRING [+FORMAT]
-d STRING: Display time described by STRING instead of 'now'+FORMAT: Control the output format
Recommended Format String
Always use this format for consistency:
'+%Y-%m-%d %H:%M:%S (%A)'
Output: 2025-11-06 14:30:00 (Wednesday)
Natural Language Parsing Examples
Current Time
date '+%Y-%m-%d %H:%M:%S (%A)'
# → 2025-11-06 14:30:00 (Wednesday)
Relative Dates
# Tomorrow
date -d "tomorrow" '+%Y-%m-%d %H:%M:%S (%A)'
# → 2025-11-07 14:30:00 (Thursday)
# Yesterday
date -d "yesterday" '+%Y-%m-%d %H:%M:%S (%A)'
# → 2025-11-05 14:30:00 (Tuesday)
# Next week
date -d "next week" '+%Y-%m-%d %H:%M:%S (%A)'
# → 2025-11-13 14:30:00 (Wednesday)
# Last week
date -d "last week" '+%Y-%m-%d %H:%M:%S (%A)'
# → 2025-10-30 14:30:00 (Wednesday)
Offset Expressions
Important: Remove "in" prefix - user says "in 3 days" → use "3 days"
# User says "in 3 days" (remove "in")
date -d "3 days" '+%Y-%m-%d %H:%M:%S (%A)'
# → 2025-11-09 14:30:00 (Saturday)
# 2 weeks
date -d "2 weeks" '+%Y-%m-%d %H:%M:%S (%A)'
# → 2025-11-20 14:30:00 (Wednesday)
# 5 months
date -d "5 months" '+%Y-%m-%d %H:%M:%S (%A)'
# → 2025-04-06 14:30:00 (Wednesday)
# Past dates
date -d "3 days ago" '+%Y-%m-%d %H:%M:%S (%A)'
# → 2025-11-03 14:30:00 (Monday)
date -d "2 weeks ago" '+%Y-%m-%d %H:%M:%S (%A)'
# → 2025-10-23 14:30:00 (Thursday)
Named Days
# Next monday
date -d "next monday" '+%Y-%m-%d %H:%M:%S (%A)'
# → 2025-11-10 14:30:00 (Monday)
# This wednesday
date -d "this wednesday" '+%Y-%m-%d %H:%M:%S (%A)'
# → 2025-11-12 14:30:00 (Wednesday)
# Last friday
date -d "last friday" '+%Y-%m-%d %H:%M:%S (%A)'
# → 2025-10-31 14:30:00 (Friday)
Complex Expressions with Times
# Tomorrow at specific time
date -d "tomorrow 3pm" '+%Y-%m-%d %H:%M:%S (%A)'
# → 2025-11-07 15:00:00 (Thursday)
# Next monday at 9am
date -d "next monday 9am" '+%Y-%m-%d %H:%M:%S (%A)'
# → 2025-11-10 09:00:00 (Monday)
# Tomorrow at 3:30pm
date -d "tomorrow 15:30" '+%Y-%m-%d %H:%M:%S (%A)'
# → 2025-11-07 15:30:00 (Thursday)
Relative Calculations
Date Arithmetic
# Calculate deadline: 3 days from tomorrow
date -d "tomorrow + 3 days" '+%Y-%m-%d %H:%M:%S (%A)'
# → 2025-11-10 14:30:00 (Sunday)
# Calculate 2 weeks before a date
date -d "2025-12-25 - 2 weeks" '+%Y-%m-%d %H:%M:%S (%A)'
# → 2025-12-11 00:00:00 (Thursday)
# Add/subtract time units
date -d "now + 2 hours" '+%Y-%m-%d %H:%M:%S (%A)'
date -d "tomorrow - 3 hours" '+%Y-%m-%d %H:%M:%S (%A)'
date -d "next monday + 2 days" '+%Y-%m-%d %H:%M:%S (%A)'
Calculate Days Between Dates
# Calculate days until deadline
DEADLINE=$(date -d "Nov 13" +%s)
NOW=$(date +%s)
DAYS=$(( ($DEADLINE - $NOW) / 86400 ))
echo "$DAYS days remaining"
# → 7 days remaining
# Time between two specific dates (in days)
DATE1=$(date -d "2025-11-06" +%s)
DATE2=$(date -d "2025-11-13" +%s)
DIFF=$(( ($DATE2 - $DATE1) / 86400 ))
echo "$DIFF days between dates"
# → 7 days between dates
Note: +%s format gives Unix timestamp (seconds since epoch), then divide difference by 86400 (seconds in a day).
Week Number Calculations
Get Current Week Number
# ISO week number (1-53)
date +%V
# → 45
# Get week number for a specific date
date -d "2025-12-25" +%V
# → 52
Academic Week Mapping
Use in conjunction with project-specific week mapping scripts to translate calendar weeks to academic weeks:
# Get calendar week
CALENDAR_WEEK=$(date +%V)
# Map to academic week (example from tu856-4-claude)
ACADEMIC_WEEK=$(~/.claude/skills/week-mapping.sh)
Common Use Cases
Pattern 1: Verify Current Date Before Responding
# ALWAYS verify current date before responding with temporal information
date '+%Y-%m-%d %H:%M:%S (%A)'
Why: The <env> context may show incorrect dates, leading to wrong responses.
Example:
- User asks: "When is next Friday?"
- Action: Check current date first → Parse "next friday"
Pattern 2: Parse Deadline Mentions
# User: "I have a deadline on Tuesday"
date -d "next tuesday" '+%Y-%m-%d %H:%M:%S (%A)'
Pattern 3: Calculate Relative Dates
# User: "Is tomorrow a weekend?"
date -d "tomorrow" '+%Y-%m-%d %H:%M:%S (%A)'
# Check day name in output
Pattern 4: Calculate Days Until Event
# User: "How many days until November 13?"
DEADLINE=$(date -d "Nov 13" +%s)
NOW=$(date +%s)
DAYS=$(( ($DEADLINE - $NOW) / 86400 ))
echo "$DAYS days remaining"
Error Handling
Fallback Pattern
If date parsing fails, fall back to current date/time:
date -d "invalid expression" '+%Y-%m-%d %H:%M:%S (%A)' 2>/dev/null || date '+%Y-%m-%d %H:%M:%S (%A)'
This pattern:
- Attempts to parse the expression
- Suppresses error messages with
2>/dev/null - Falls back to current date with
|| date ...
Common Parsing Issues
-
"in X days" doesn't work: Remove "in" prefix
- ❌
date -d "in 3 days" - ✅
date -d "3 days"
- ❌
-
Always quote expressions: Prevents shell parsing issues
- ❌
date -d next monday - ✅
date -d "next monday"
- ❌
-
Use consistent format: Always use the recommended format string
- ✅
'+%Y-%m-%d %H:%M:%S (%A)'
- ✅
Format String Reference
The recommended format string components:
%Y: 4-digit year (2025)%m: 2-digit month (01-12)%d: 2-digit day (01-31)%H: 2-digit hour, 24-hour format (00-23)%M: 2-digit minute (00-59)%S: 2-digit second (00-59)%A: Full weekday name (Monday, Tuesday, etc.)
Other useful format codes:
%V: ISO week number (01-53)%s: Unix timestamp (seconds since 1970-01-01 00:00:00 UTC)%z: Timezone offset (+0100)%Z: Timezone name (EST, PST, etc.)
Configuration
The date command uses:
- Language: System locale (usually English)
- Timezone: System timezone
- Date handling: Correctly interprets "next" vs "this" for weekdays
ADHD/Neurodivergent Support
This skill is particularly useful for:
- Track time meticulously for executive function support
- Parse time mentions in user messages automatically
- Verify temporal context when planning tasks
- Support deadline tracking with natural language
- Calculate available time between events
Version History
-
v3.0.0 (2025-11-06): Native GNU date command
- Removed Python dependency entirely
- Uses native Linux
datecommand with-dflag - Progressive disclosure: moved technical details to reference.md
- Lean SKILL.md with reference to this file
-
v2.0.0 (2025-10-29): Switched to parsedatetime
- Replaced dateparser with parsedatetime for better "next/this" handling
- Added isolated virtual environment for dependency management
-
v1.0.0 (2024-10-29): Initial Python version with dateparser
- Migrated from Node.js/chrono-node to Python/dateparser