[Canonical page](<https://docs.dhtmlx.com/planning-engine/net/api/core/data/time-unit/>)
[Full documentation index](<https://docs.dhtmlx.com/planning-engine/llms.txt>)


# TimeUnit

The unit that a task's duration and a link's lag are counted in. The project default is [`SchedulingConfig.DurationUnit`](<https://docs.dhtmlx.com/planning-engine/net/api/core/data/scheduling-config.md>). A task overrides it with [`TaskData.DurationUnit`](<https://docs.dhtmlx.com/planning-engine/net/api/core/data/task-data.md>), and a link with [`LinkData.LagUnit`](<https://docs.dhtmlx.com/planning-engine/net/api/core/data/link-data.md>).

## Declaration

```csharp
namespace Plen;

public enum TimeUnit { Minute, Hour, Day }
```

`default(TimeUnit)` is `Minute`. The default of [`SchedulingConfig.DurationUnit`](<https://docs.dhtmlx.com/planning-engine/net/api/core/data/scheduling-config.md#durationunit>) is `Day`.

## Values

| Value | Description |
|---|---|
| `Minute` | Working minutes. Amounts are rounded to whole minutes when a date is placed. |
| `Hour` | Working hours of 60 minutes. Amounts are rounded to whole minutes when a date is placed. |
| `Day` | Working days. A working date of any length counts as one day, and a placed date keeps its time of day. Amounts are rounded to whole days when a date is placed. |

Weeks, months and years have no value.

A duration or lag in these units is working time: non-working time on the task's calendar doesn't count. [`TaskData.LevelingDelay`](<https://docs.dhtmlx.com/planning-engine/net/api/core/data/task-data.md>) and [`Pause`](<https://docs.dhtmlx.com/planning-engine/net/api/core/data/pause.md>) lengths use the same unit as elapsed time, where `Day` means 24 hours.

## Where it's used

| Member | Type | Meaning |
|---|---|---|
| [`SchedulingConfig.DurationUnit`](<https://docs.dhtmlx.com/planning-engine/net/api/core/data/scheduling-config.md>) | `TimeUnit` | Project default, `Day` unless set. |
| [`TaskData.DurationUnit`](<https://docs.dhtmlx.com/planning-engine/net/api/core/data/task-data.md>) | `TimeUnit?` | Unit of the task's `Duration`, `LevelingDelay` and `Pauses`. `null` uses the project default. |
| [`LinkData.LagUnit`](<https://docs.dhtmlx.com/planning-engine/net/api/core/data/link-data.md>) | `TimeUnit?` | Unit of the link's `Lag`. `null` uses the project default. |
| [`LinkAdd.LagUnit`](<https://docs.dhtmlx.com/planning-engine/net/api/core/changes/link-add.md>) | `TimeUnit?` | Same as `LinkData.LagUnit`, for a link added after the first solve. |
| [`LinkUpdate.LagUnit`](<https://docs.dhtmlx.com/planning-engine/net/api/core/changes/link-update.md>) | [`Patch<TimeUnit>`](<https://docs.dhtmlx.com/planning-engine/net/api/core/changes/patch.md>) | Changes the unit of an existing link's lag. |

`TimeUnit` has no parse or spelling helpers. In JSON the values are spelled `"minute"`, `"hour"` and `"day"`; the `Plen.Wire` package reads and writes them. See [Exchange JSON with a client](<https://docs.dhtmlx.com/planning-engine/net/how-to/exchange-json-with-a-client.md>).

## Example

The project counts in days, one task counts in hours, and one link's lag is in minutes:

```csharp
using Plen;

var start = Moment.FromYmdHm(2026, 4, 6, 8, 0)
    ?? throw new InvalidOperationException("invalid date");

var data = new ProjectData
{
    Config = new SchedulingConfig { DurationUnit = TimeUnit.Day },
    Tasks =
    [
        new TaskData(1) { StartDate = start, Duration = 2.0 },
        new TaskData(2) { StartDate = start, Duration = 6.0, DurationUnit = TimeUnit.Hour },
    ],
    Links =
    [
        new LinkData { Id = "a", Source = 1, Target = 2, Lag = 30.0, LagUnit = TimeUnit.Minute },
    ],
};

var result = Engine.Schedule(data, new SolveOptions());
foreach (var update in result.Updates)
{
    Console.WriteLine(update);
}
```

## Related

- [`SchedulingConfig`](<https://docs.dhtmlx.com/planning-engine/net/api/core/data/scheduling-config.md#durationunit>) - the project default unit
- [`TaskData`](<https://docs.dhtmlx.com/planning-engine/net/api/core/data/task-data.md>) - per-task duration unit
- [`LinkData`](<https://docs.dhtmlx.com/planning-engine/net/api/core/data/link-data.md#lagunit>) - per-link lag unit
- [Project data](<https://docs.dhtmlx.com/planning-engine/net/scheduling/project-data.md>) - durations and units
