# Duration

represents a duration of time with support for various units (nanoseconds, microseconds, milliseconds, seconds, minutes, hours, and days).&#x20;

It provides methods to create, manipulate, and compare durations, as well as convert them to different units and formats.

{% code title="Example Usage" %}

```typescript
// Create a duration of 5 seconds
const duration = Duration.seconds(5);

// Convert the duration to minutes
const minutes = duration.inWholeMinutes();

console.log(minutes);
// Output: 0

// Add another duration of 2 minutes
const sum = duration.add(Duration.minutes(2));

console.log(sum.inWholeSeconds());
// Output: 420
```

{% endcode %}

## Main functionalities&#x20;

* Create a duration object from different units of time (*nanoseconds*, *microseconds*, *milliseconds*, *seconds*, *minutes*, *hours*, and *days*)&#x20;
* Convert the duration to different units (*seconds*, *minutes*, *hours*, and *days*)&#x20;
* Perform arithmetic operations on durations (*addition*, *subtraction*, *multiplication*, *division*)
* Compare durations (*equality*, l*ess than*, *greater than*)&#x20;
* Format the duration as a string representation

## Global Functions

### durationOf

Creates a Duration object from a duration in milliseconds.

```typescript
const duration = durationOf(5000);
console.log(duration.toSeconds()); // Output: 5
```

## Static Functions

### nanoseconds

Creates a Duration object from a duration in nanoseconds.

```typescript
const duration = Duration.nanoseconds(1e9);
```

### microseconds

Creates a Duration object from a duration in microseconds.

```typescript
const duration = Duration.microseconds(5000000);
```

### milliseconds

Creates a Duration object from a duration in milliseconds.

```typescript
const duration = Duration.milliseconds(5000);
```

### seconds

Creates a Duration object from a duration in seconds.

```typescript
const duration = Duration.seconds(60);
```

### minutes

Creates a Duration object from a duration in minutes.

```typescript
const duration = Duration.minutes(60);
```

### hours

Creates a Duration object from a duration in hours.

```typescript
const duration = Duration.hours(24);
```

### days

Creates a Duration object from a duration in days.

```typescript
const duration = Duration.days(7);
```

## Class Functions

### inWholeSeconds

Converts the duration to seconds.

```typescript
const seconds = (2).minutes().inWholeSeconds();
console.log(seconds);
// Output: 120
```

### inWholeMinutes

Converts the duration to minutes.

```typescript
const minutes = (2).hours().inWholeMinutes();
console.log(minutes);
// Output: 120
```

### inWholeHours

Converts the duration to hours.

```typescript
const hours = (1).days().inWholeHours();
console.log(hours);
// Output: 24
```

### inWholeDays

Converts the duration to days.

```typescript
const days = (48).hours().inWholeDays();
console.log(days);
// Output: 2
```

### toObject

Converts the duration to an object with properties for each time unit.

```typescript
const durationObject = (123).seconds().toObject();
console.log(durationObject);
// Output: { nanoseconds: 123000000000, microseconds: 123000000, milliseconds: 123000, seconds: 123, minutes: 2, hours: 0, days: 0 }
```

### toComponents

Splits this duration into days, hours, minutes, seconds, and nanoseconds.

```typescript
const components = (2).days().add((12).hours()).toComponents();
console.log(components);
// Output: { days: 2, hours: 12, minutes: 0, seconds: 0, nanoseconds: 0 }
```

### add

Adds another duration to this duration.

```typescript
const sum = (12).hours().add((30).minutes());
console.log(sum.toMinutes());
// Output: 750
```

### subtract

Subtracts another duration from this duration.

```typescript
const difference = (12).hours().subtract((30).minutes());
console.log(difference.toMinutes());
// Output: 630
```

### multiply

Multiplies this duration by a scalar factor.

```typescript
const multiplied = (10).minutes().multiply(2);
console.log(multiplied.toMinutes());
// Output: 20
```

### divide

Divides this duration by a scalar divisor.

```typescript
const divided = (1).hours().divide(2);
console.log(divided.toMinutes());
// Output: 30
```

### equals

Checks if this duration is equal to another duration.

```typescript
const duration1 = (5).hours();
const duration2 = (5).hours();
console.log(duration1.equals(duration2)); // Output: true
```

### lessThan

Checks if this duration is less than another duration.

```typescript
const duration1 = (10).seconds();
const duration2 = (20).seconds();

console.log(duration1.lessThan(duration2)); // Output: true
```

### greaterThan

Checks if this duration is greater than another duration.

```typescript
const duration1 = (10).seconds();
const duration2 = (5).seconds();
const result = duration1.greaterThan(duration2);
console.log(result); // Output: true
```

### compareTo

Compares this duration with another duration.

```typescript
const duration1 = (1).days();
const duration2 = (24).hours();
console.log(duration1.compareTo(duration2)); // Output: 0
```

### runIt

Splits this duration into days, hours, minutes, seconds, and nanoseconds and executes the given action with these components. The result of the action is returned.

```typescript
const result = (3600).seconds()
    .runIt((days, hours, minutes, seconds, nanoseconds) => {
        return `${days}d ${hours}h ${minutes}m ${seconds}s ${nanoseconds}ns`;
    });
console.log(result);
// Output: 0d 1h 0m 0s 0ns
```

### toString

Formats the duration as a string.

```typescript
const duration = (1).days().add((6).hours());
const formattedString = duration.toString();
console.log(formattedString);
// Output: 1d 6h 0m 0s 0ns
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://katxupa.gitbook.io/katxupa/get-a-taste-of-katxupa/dip-dive/duration.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
