# Get Dates

> Resolve target date from argument and return all date formats needed for planning rituals.

- Skill: `diegosouzapw/get-dates` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add diegosouzapw/get-dates`
- Raw SKILL.md: https://api.skillmd.com/api/skills/diegosouzapw/get-dates/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: diegosouzapw (https://skillmd.com/u/diegosouzapw)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/diegosouzapw/get-dates

---


# Get Dates

This sub-skill resolves a target date from user arguments and returns all date-related fields needed by planning rituals.

## Input

The `$ARGUMENTS` variable contains the raw date argument:
- `(empty)` → today
- `today` → today
- `tomorrow` → tomorrow
- `monday`, `tuesday`, etc. → next occurrence (including today if matches)
- `next monday`, `next tuesday`, etc. → next occurrence after today
- `YYYY-MM-DD` → specific date

## Instructions

1. Parse `$ARGUMENTS` to determine the target date

2. Use macOS `date` commands to resolve relative dates:

   ```bash
   # For "tomorrow"
   date -v+1d +"%Y-%m-%d"

   # For next weekday (e.g., "monday")
   # Calculate days until next occurrence
   ```

3. Calculate all date fields for the resolved target date:

   ```bash
   # Day of week
   date -j -f "%Y-%m-%d" "$TARGET_DATE" +"%A"

   # ISO week number
   date -j -f "%Y-%m-%d" "$TARGET_DATE" +"%Y-W%V"

   # Month
   date -j -f "%Y-%m-%d" "$TARGET_DATE" +"%Y-%m"

   # Quarter
   # Q1: Jan-Mar, Q2: Apr-Jun, Q3: Jul-Sep, Q4: Oct-Dec
   ```

4. Determine relationship to today:
   - `is_today`: target date equals current date
   - `is_future`: target date is after current date
   - `is_past`: target date is before current date

## Output

Return structured JSON:

```json
{
  "target_date": "2026-02-15",
  "day_name": "Sunday",
  "day_short": "Sun",
  "week": "2026-W07",
  "month": "2026-02",
  "month_name": "February",
  "quarter": "2026-Q1",
  "year": "2026",
  "is_today": false,
  "is_future": true,
  "is_past": false,
  "days_from_today": 1
}
```

## Error Cases

- **Invalid date format**: Return error with valid format examples
- **Past date**: Allow but set `is_past: true` for caller to handle

## Example Resolutions

| Input | Target Date | Notes |
|-------|-------------|-------|
| `(empty)` | 2026-02-14 | Today |
| `today` | 2026-02-14 | Today |
| `tomorrow` | 2026-02-15 | +1 day |
| `monday` | 2026-02-16 | Next Monday (including today if Monday) |
| `next monday` | 2026-02-16 | Next Monday (always future) |
| `2026-02-20` | 2026-02-20 | Specific date |

---

## Week Resolution (for weekly rituals)

When `scope=week` is passed in arguments or the input contains an ISO week format:

### Week Input Formats
- `(empty)` → current week
- `last week` → previous week
- `YYYY-Www` → specific ISO week (e.g., 2026-W07)

### Week Calculations

```bash
# Get current ISO week
date +"%G-W%V"

# Get week start (Monday) from ISO week
# Use: date command with week calculation

# Get week end (Sunday) from ISO week
# week_end = week_start + 6 days
```

### Extended Output for Weekly Scope

When resolving weeks, include these additional fields:

```json
{
  "target_date": "2026-02-14",
  "day_name": "Saturday",
  "day_short": "Sat",
  "week": "2026-W07",
  "week_start": "2026-02-09",
  "week_end": "2026-02-15",
  "is_current_week": true,
  "is_past_week": false,
  "month": "2026-02",
  "month_name": "February",
  "quarter": "2026-Q1",
  "year": "2026",
  "is_today": false,
  "is_future": true,
  "is_past": false,
  "days_from_today": 1
}
```

### Week Resolution Examples

| Input | Target Week | Week Start | Week End |
|-------|-------------|------------|----------|
| `(empty)` scope=week | 2026-W07 | 2026-02-09 | 2026-02-15 |
| `last week` | 2026-W06 | 2026-02-02 | 2026-02-08 |
| `2026-W05` | 2026-W05 | 2026-01-26 | 2026-02-01 |

### Week Resolution Logic

1. If input matches `YYYY-Www` pattern → use directly
2. If input is `last week` → current week minus 1
3. If `scope=week` with empty input → current week
4. Calculate `week_start` as the Monday of that week
5. Calculate `week_end` as the Sunday of that week

