Download the exact captured file
---
name: nqtr-time
description: Use when configuring or using the NQTR time system — timeTracker.initialize (dayStartTime, dayEndTime, timeSlots, weekLength, weekendStartDay, getDayName), currentTime/currentDate, increaseTime/increaseDate, nowIsBetween, isWeekend, currentTimeSlot, and the ink commands "# set time", "# set date", "# wait".
---
# NQTR time system
Official docs: [pixi-vn.com/nqtr/time](https://pixi-vn.com/nqtr/time). Index: [nqtr](../getting-started/SKILL.md). Use ink for story-side time changes when available: [nqtr-ink](../ink/SKILL.md).
`date` and `time` are deliberately generic numbers: `time` is the time of day and resets each time `date` increments. Time can mean hours, minutes or an era. Use `timeTracker` (import from `@drincs/nqtr`).
## Initialize (TypeScript, once at startup)
```ts title="main.ts"
import { timeTracker } from "@drincs/nqtr";
timeTracker.initialize({
defaultTimeSpent: 1, // default for `# wait`
dayStartTime: 0,
dayEndTime: 24,
timeSlots: [
{ name: "Morning", startTime: 5 },
{ name: "Afternoon", startTime: 12 },
{ name: "Evening", startTime: 18 },
{ name: "Night", startTime: 22 },
],
weekLength: 7,
weekendStartDay: 6, // default weekLength - 1
getDayName: (weekDayNumber) => ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"][weekDayNumber],
});
```
Defaults: `dayStartTime 0`, `dayEndTime 24`, `defaultTimeSpent 1`, `timeSlots []`, `weekLength 7`.
## Get / set
```ts
timeTracker.currentTime; // number
timeTracker.currentDate; // number
timeTracker.currentTime = 12;
timeTracker.currentDate = 5;
```
```ink
# set time 12
# set time 18.30
# set time 18:30 // ':' is converted to '.' internally
# set date 5
```
## Increment
`increaseTime(delta?)` adds time; past `dayEndTime` it increments the date and restarts from `dayStartTime` plus the overflow. `increaseDate(delta?, time?)` adds days and optionally sets the time.
```ts
timeTracker.increaseTime(2);
timeTracker.increaseDate(1, 8); // +1 day, time 8
```
```ink
# wait // + defaultTimeSpent
# wait 2 // + 2 time units
# wait days 1 // + 1 day, time = dayStartTime
# wait days 1 hours 2 // + 1 day and + 2 time
```
## Queries
| API | Meaning |
| --- | --- |
| `timeTracker.isWeekend` | current day is in the weekend |
| `timeTracker.currentWeekDayNumber` | 0-based weekday index |
| `timeTracker.currentDayName` | via `getDayName` |
| `timeTracker.currentTimeSlot` | index in `timeSlots` of the current slot |
| `timeTracker.nowIsBetween(from, to)` | current time in `[from, to)`; wraps over midnight when `from > to` |
## Time-dependent images
Do not branch manually everywhere: build a small class (`TimeSlotsImage`) holding one image per slot and returning the right one from `timeTracker.currentTimeSlot` in a `src` getter, then use it for room backgrounds/sprites.
## Pitfalls
- Activities/commitments scheduling (`timeSlot: { from, to }`) uses the same time scale: keep `dayEndTime` consistent with the slots you write. A slot with `from > to` (e.g. `{ from: 20, to: 10 }`) wraps over midnight.
- Time changes are not automatic: the story/UI must call `# wait` / `increaseTime` when the player spends time.