> ## Documentation Index
> Fetch the complete documentation index at: https://docs.timetracker.in/llms.txt
> Use this file to discover all available pages before exploring further.

# Report date ranges and periods

> Set a report's date window. All nine rolling periods, fixed ranges, the date basis each source uses, and why a relative period never goes stale.

Every report covers a date window. You set it in the **Period** section of the builder, and it decides which records the report counts.

## Two kinds of period

| Mode            | What it does                                                                         |
| --------------- | ------------------------------------------------------------------------------------ |
| **Relative**    | A rolling window such as **This month**, worked out fresh every time the report runs |
| **Fixed range** | A start date and an end date you pick from the calendar                              |

<Note>
  A relative period is the one to reach for. A report set to **This month** always shows the current month – in July it shows July, in August it shows August, with nobody editing it. A fixed range shows the same dates forever.
</Note>

## The nine relative periods

| Period           | Covers                                                 |
| ---------------- | ------------------------------------------------------ |
| **Today**        | Today, from midnight to the last moment of the day     |
| **Yesterday**    | The whole of yesterday                                 |
| **This week**    | The current week, from your workspace's week-start day |
| **Last week**    | The week before this one                               |
| **This month**   | The current calendar month                             |
| **Last month**   | The whole of the previous calendar month               |
| **This year**    | The current calendar year                              |
| **Last 7 days**  | The last 7 days including today                        |
| **Last 30 days** | The last 30 days including today                       |

All nine windows are inclusive at both ends. **Last 7 days** on a Wednesday runs from last Thursday's midnight to the last moment of today – seven days, not eight.

### Which timezone decides

Every relative period is a calendar claim, and a calendar claim only means something once you say whose midnight. TimeTracker uses your **workspace timezone**.

That matters most for scheduled reports. A daily email fires from a server clock, but the window it covers is still your workspace's day – not the server's. See [/concepts/dates-times-and-timezones](/concepts/dates-times-and-timezones).

Weeks follow your workspace's week-start day, the same one timesheets use, so a "week" means the same thing on a report as it does on a timesheet.

## Fixed ranges

Choose **Fixed range** and two date fields appear: a **Start date** and an **End date**. Both use the standard date picker.

Both ends are inclusive. A range of 1 July to 31 July includes everything logged on 31 July.

Use a fixed range for:

* A closed quarter you are reporting to a client
* An audit window that must never move
* A one-off comparison against a specific past period

<Warning>
  A fixed range freezes. Six months later it still shows the same dates. If someone opens an old fixed-range report expecting current numbers, they will read stale ones. Name fixed-range reports so the dates are obvious, such as `Q2 close – Bluebird Coffee`.
</Warning>

## Which date the period filters on

Each source has its own idea of "the date". The **date basis** is the field the window applies to.

| Source           | Default basis | Other choices                 |
| ---------------- | ------------- | ----------------------------- |
| **Time entries** | Entry date    | –                             |
| **Expenses**     | Expense date  | Date recorded, Date submitted |
| **Invoices**     | Issue date    | Due date                      |
| **Projects**     | Created       | Start date, Due date          |
| **Tasks**        | Created       | Due date, Start date          |
| **Timesheets**   | Period end    | –                             |
| **Time off**     | Start date    | End date                      |
| **Timecard**     | Date          | –                             |

This changes the answer. An expenses report on **Expense date** counts money by when it was spent. The same report on **Date submitted** counts by when the claim came in. Both are valid; they answer different questions.

<Tip>
  For a receivables aging report, use the **Due date** basis on the Invoices source. Aging is measured from the due date, so windowing on the issue date will not line up with what you are reading.
</Tip>

### Records with no date

If a record has no value for the chosen basis – a task with no due date, an expense never submitted – it falls outside a windowed report rather than being dropped onto some other date. Projects and tasks are still included as a zero row when the report groups by them, so they never vanish from a project-grouped report.

## How to set a period

<Steps>
  <Step title="Open Period">
    In the report builder, open the **Period** section. The header chip shows the current window at a glance.
  </Step>

  <Step title="Pick the type">
    Choose **Relative** or **Fixed range** in the **Period type** dropdown.
  </Step>

  <Step title="Pick the window">
    For **Relative**, choose one of the nine ranges. For **Fixed range**, pick a start and an end date.
  </Step>

  <Step title="Check the preview">
    The preview reruns immediately, so you can see the effect before saving.
  </Step>
</Steps>

## Changing the period without changing the report

On a saved report you are only reading, the **Period** control at the top is a temporary override. Change it and the report reruns – the saved report is untouched.

A banner confirms it:

> **Temporary preview**
> You're previewing with temporary filters. They won't change this saved report.

**Reset** puts it back. **Save as new report** keeps the change as a new report, if you can create reports.

The read-only viewer also shows a context strip above the table with **Date range**, **Grouped by**, **Sorted by** and **Filters**, so you can always see which window the numbers cover.

## Example

Northwind Studio runs the same question over three windows.

| Report                         | Period                    | Why                                            |
| ------------------------------ | ------------------------- | ---------------------------------------------- |
| **Time detail**                | Last 30 days              | A rolling audit of what has just been logged   |
| **Hours by project**           | This month                | The current month's picture, always up to date |
| **Q2 close – Bluebird Coffee** | Fixed, 1 April to 30 June | A closed quarter that must never move          |

Daniel Okafor builds a receivables report on the Invoices source, sets the date basis to **Due date**, and the period to **This month**. He now sees everything falling due this month, split into the aging buckets.

## Permissions

Setting a period needs no capability of its own. The rules that apply:

* Changing the period on a saved report needs edit rights on that report – `report.edit` plus ownership, or `report.manage`.
* A temporary period override in the viewer needs nothing beyond `report.view`, because nothing is saved.

See [/reports/report-permissions](/reports/report-permissions).

## What happens next

The period travels with the report. An export covers the report's period. A scheduled email runs its saved period – so a weekly email on **Last 7 days** always sends the last seven days, not the seven days from when it was created.

## Common questions

<AccordionGroup>
  <Accordion title="Does a relative period go out of date?">
    No. The window is worked out at the moment the report runs, never frozen when it was saved.
  </Accordion>

  <Accordion title="Does 'Last 7 days' include today?">
    Yes. It covers today plus the six days before it.
  </Accordion>

  <Accordion title="When does 'This week' start?">
    On your workspace's week-start day – the same day timesheets use.
  </Accordion>

  <Accordion title="Can I compare two periods side by side?">
    Not in one report. Build the report twice with different periods, or pivot on a date bucket such as **Month** to see several periods as columns. See [/reports/grouping-and-pivots](/reports/grouping-and-pivots).
  </Accordion>

  <Accordion title="Why does my expense report miss expenses I know exist?">
    They may fall outside the chosen date basis. An expense with no submission date is excluded from a report windowed on **Date submitted**. Switch the basis to **Expense date**.
  </Accordion>

  <Accordion title="Does the period change what a scheduled email sends?">
    Yes. The email runs the report's saved period against the day it fires, so a **Last 7 days** report is always the previous seven days.
  </Accordion>
</AccordionGroup>

## Troubleshooting

| Message or symptom                                                       | Fix                                                                                                      |
| ------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------- |
| *"A fixed date range needs both a start and an end."*                    | Fill in both dates                                                                                       |
| *"The end of that date range falls before its start. Check both dates."* | Swap the two dates                                                                                       |
| *"Pick which rolling period this report should cover."*                  | Choose one of the nine relative ranges                                                                   |
| The report is empty for a period you know has data                       | Check the date basis – the window may be applying to a different date field                              |
| The report shows a different month than a colleague sees                 | You are in different workspaces, with different timezones, or one of you has a temporary override active |

## Related guides

<CardGroup cols={2}>
  <Card title="Build a report" icon="wrench" href="/reports/build-a-report">
    The Period section inside the whole builder.
  </Card>

  <Card title="Report sources" icon="database" href="/reports/report-sources">
    Which date fields each source allows.
  </Card>

  <Card title="Grouping and pivots" icon="folder-tree" href="/reports/grouping-and-pivots">
    Date buckets inside the window.
  </Card>

  <Card title="Schedule a report" icon="clock" href="/reports/schedule-a-report">
    How the period behaves on a recurring email.
  </Card>

  <Card title="Dates, times and timezones" icon="globe" href="/concepts/dates-times-and-timezones">
    Which clock a calendar day follows.
  </Card>
</CardGroup>
