or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

datetime.mdduration.mdindex.mdinfo-settings.mdinterval.mdzones.md

duration.mddocs/

0

# Duration API

1

2

The Duration class represents time periods and supports operations like addition, subtraction, and unit conversion. It handles units from milliseconds to years with flexible conversion accuracy settings.

3

4

## Capabilities

5

6

### Static Factory Methods

7

8

Methods for creating Duration instances from various sources.

9

10

```javascript { .api }

11

/**

12

* Create Duration from milliseconds

13

* @param count - Number of milliseconds

14

* @param opts - Options including locale, numberingSystem, conversionAccuracy

15

*/

16

static fromMillis(count: number, opts?): Duration;

17

18

/**

19

* Create Duration from object with duration units

20

* @param obj - Object with duration properties (years, months, days, etc.)

21

* @param opts - Options including locale, numberingSystem, conversionAccuracy

22

*/

23

static fromObject(obj: object, opts?): Duration;

24

25

/**

26

* Create Duration from Duration-like input

27

* @param durationLike - Duration instance, object, or number (milliseconds)

28

*/

29

static fromDurationLike(durationLike: Duration | object | number): Duration;

30

31

/**

32

* Parse Duration from ISO 8601 duration string

33

* @param text - ISO 8601 duration string (e.g., "P1Y2M3DT4H5M6S")

34

* @param opts - Options including locale, numberingSystem, conversionAccuracy

35

*/

36

static fromISO(text: string, opts?): Duration;

37

38

/**

39

* Parse Duration from ISO 8601 time string (if less than 24 hours)

40

* @param text - ISO 8601 time string (e.g., "14:30:15")

41

* @param opts - Options including locale, numberingSystem, conversionAccuracy

42

*/

43

static fromISOTime(text: string, opts?): Duration;

44

45

/**

46

* Create an invalid Duration

47

* @param reason - Reason for invalidity

48

* @param explanation - Additional explanation

49

*/

50

static invalid(reason: string, explanation?: string): Duration;

51

52

/**

53

* Check if object is a Duration instance

54

* @param o - Object to check

55

*/

56

static isDuration(o: any): boolean;

57

```

58

59

### Instance Properties

60

61

Access duration components and metadata.

62

63

```javascript { .api }

64

// Configuration

65

locale: string;

66

numberingSystem: string;

67

68

// Duration components

69

years: number;

70

quarters: number;

71

months: number;

72

weeks: number;

73

days: number;

74

hours: number;

75

minutes: number;

76

seconds: number;

77

milliseconds: number;

78

79

// Validation

80

isValid: boolean;

81

invalidReason: string | null;

82

invalidExplanation: string | null;

83

```

84

85

### Instance Methods

86

87

#### Formatting

88

89

```javascript { .api }

90

/**

91

* Format duration with custom format string

92

* @param fmt - Format pattern using duration tokens

93

* @param opts - Options including round

94

*/

95

toFormat(fmt: string, opts?): string;

96

97

/**

98

* Human-readable string with all significant units

99

* @param opts - Options including listStyle, unitDisplay, locale

100

*/

101

toHuman(opts?): string;

102

103

/**

104

* Convert to JavaScript object

105

*/

106

toObject(): object;

107

108

/**

109

* Convert to ISO 8601 duration string

110

*/

111

toISO(): string;

112

113

/**

114

* Convert to ISO 8601 time string (if less than 24 hours)

115

* @param opts - Options including suppressMilliseconds, suppressSeconds

116

*/

117

toISOTime(opts?): string;

118

119

/**

120

* JSON representation (ISO string)

121

*/

122

toJSON(): string;

123

124

/**

125

* String representation (ISO format)

126

*/

127

toString(): string;

128

```

129

130

#### Numeric Conversion

131

132

```javascript { .api }

133

/**

134

* Total duration in milliseconds

135

*/

136

toMillis(): number;

137

138

/**

139

* Total duration in milliseconds (for sorting/comparison)

140

*/

141

valueOf(): number;

142

```

143

144

#### Arithmetic Operations

145

146

```javascript { .api }

147

/**

148

* Add another duration

149

* @param duration - Duration to add or object with duration units

150

*/

151

plus(duration: Duration | object): Duration;

152

153

/**

154

* Subtract another duration

155

* @param duration - Duration to subtract or object with duration units

156

*/

157

minus(duration: Duration | object): Duration;

158

159

/**

160

* Return negative duration

161

*/

162

negate(): Duration;

163

```

164

165

#### Unit Operations

166

167

```javascript { .api }

168

/**

169

* Transform duration units with function

170

* @param fn - Function to apply to each unit value

171

*/

172

mapUnits(fn: (value: number, unit: string) => number): Duration;

173

174

/**

175

* Get value of specific unit

176

* @param unit - Unit name (years, months, days, etc.)

177

*/

178

get(unit: string): number;

179

180

/**

181

* Set specific duration values

182

* @param values - Object with duration properties to set

183

*/

184

set(values: object): Duration;

185

186

/**

187

* Reconfigure duration settings

188

* @param opts - Options including locale, numberingSystem, conversionAccuracy

189

*/

190

reconfigure(opts: {locale?, numberingSystem?, conversionAccuracy?}): Duration;

191

192

/**

193

* Convert duration to single unit

194

* @param unit - Target unit (years, months, days, hours, minutes, seconds, milliseconds)

195

*/

196

as(unit: string): number;

197

198

/**

199

* Normalize duration to canonical representation

200

*/

201

normalize(): Duration;

202

203

/**

204

* Convert to different units

205

* @param units - Array of target units in preferred order

206

*/

207

shiftTo(...units: string[]): Duration;

208

```

209

210

#### Comparison

211

212

```javascript { .api }

213

/**

214

* Check equality with other Duration

215

* @param other - Duration to compare

216

*/

217

equals(other: Duration): boolean;

218

```

219

220

### Conversion Matrix Constants

221

222

Constants for unit conversion accuracy.

223

224

```javascript { .api }

225

/**

226

* Low-order conversion matrix for precise calculations

227

*/

228

static lowOrderMatrix: object;

229

230

/**

231

* Casual conversion matrix (default) - 1 month = 30 days, 1 year = 365 days

232

*/

233

static casualMatrix: object;

234

235

/**

236

* Accurate conversion matrix for more precise date-aware calculations

237

*/

238

static accurateMatrix: object;

239

```

240

241

## Usage Examples

242

243

```javascript

244

import { Duration } from "luxon";

245

246

// Creating durations

247

const duration1 = Duration.fromObject({ hours: 2, minutes: 30 });

248

const duration2 = Duration.fromMillis(5400000); // 1.5 hours in milliseconds

249

const duration3 = Duration.fromISO("PT2H30M"); // ISO duration string

250

251

console.log(duration1.hours); // 2

252

console.log(duration1.minutes); // 30

253

console.log(duration1.toMillis()); // 9000000

254

255

// Formatting

256

console.log(duration1.toFormat("h 'hours', m 'minutes'")); // "2 hours, 30 minutes"

257

console.log(duration1.toHuman()); // "2 hours, 30 minutes"

258

console.log(duration1.toISO()); // "PT2H30M"

259

260

// Unit conversion

261

console.log(duration1.as('minutes')); // 150

262

console.log(duration1.shiftTo('minutes').minutes); // 150

263

264

// Arithmetic

265

const total = duration1.plus({ minutes: 15 }); // 2 hours, 45 minutes

266

const difference = duration1.minus({ minutes: 30 }); // 2 hours

267

const negative = duration1.negate(); // -2 hours, -30 minutes

268

269

// Working with different conversion matrices

270

const precise = Duration.fromObject(

271

{ months: 1, days: 15 },

272

{ conversionAccuracy: 'longterm' }

273

);

274

```

275

276

## Format Tokens

277

278

Duration formatting uses these tokens:

279

280

- `S` - milliseconds

281

- `s` - seconds

282

- `m` - minutes

283

- `h` - hours

284

- `d` - days

285

- `w` - weeks

286

- `M` - months

287

- `y` - years

288

289

Modifiers:

290

- Single token (e.g., `s`) - minimal digits

291

- Padded token (e.g., `ss`) - zero-padded to 2 digits

292

- Literal text in quotes (e.g., `'hours'`)

293

294

## Conversion Accuracy

295

296

Duration supports different conversion accuracy modes:

297

298

- **`casual`** (default): 1 month = 30 days, 1 year = 365 days

299

- **`longterm`**: More accurate for longer periods, considers leap years

300

- **`accurate`**: Most precise, but may be slower for large durations