@gobrand/tiempo 2.2.3 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/README.md +208 -12
  2. package/dist/addDays.d.ts +37 -0
  3. package/dist/addDays.d.ts.map +1 -0
  4. package/dist/addDays.js +8 -0
  5. package/dist/addDays.js.map +1 -0
  6. package/dist/addDays.test.d.ts +2 -0
  7. package/dist/addDays.test.d.ts.map +1 -0
  8. package/dist/addHours.d.ts +37 -0
  9. package/dist/addHours.d.ts.map +1 -0
  10. package/dist/addHours.js +8 -0
  11. package/dist/addHours.js.map +1 -0
  12. package/dist/addHours.test.d.ts +2 -0
  13. package/dist/addHours.test.d.ts.map +1 -0
  14. package/dist/addMicroseconds.d.ts +36 -0
  15. package/dist/addMicroseconds.d.ts.map +1 -0
  16. package/dist/addMicroseconds.js +8 -0
  17. package/dist/addMicroseconds.js.map +1 -0
  18. package/dist/addMicroseconds.test.d.ts +2 -0
  19. package/dist/addMicroseconds.test.d.ts.map +1 -0
  20. package/dist/addMilliseconds.d.ts +36 -0
  21. package/dist/addMilliseconds.d.ts.map +1 -0
  22. package/dist/addMilliseconds.js +8 -0
  23. package/dist/addMilliseconds.js.map +1 -0
  24. package/dist/addMilliseconds.test.d.ts +2 -0
  25. package/dist/addMilliseconds.test.d.ts.map +1 -0
  26. package/dist/addMinutes.d.ts +36 -0
  27. package/dist/addMinutes.d.ts.map +1 -0
  28. package/dist/addMinutes.js +8 -0
  29. package/dist/addMinutes.js.map +1 -0
  30. package/dist/addMinutes.test.d.ts +2 -0
  31. package/dist/addMinutes.test.d.ts.map +1 -0
  32. package/dist/addMonths.d.ts +37 -0
  33. package/dist/addMonths.d.ts.map +1 -0
  34. package/dist/addMonths.js +8 -0
  35. package/dist/addMonths.js.map +1 -0
  36. package/dist/addMonths.test.d.ts +2 -0
  37. package/dist/addMonths.test.d.ts.map +1 -0
  38. package/dist/addNanoseconds.d.ts +36 -0
  39. package/dist/addNanoseconds.d.ts.map +1 -0
  40. package/dist/addNanoseconds.js +8 -0
  41. package/dist/addNanoseconds.js.map +1 -0
  42. package/dist/addNanoseconds.test.d.ts +2 -0
  43. package/dist/addNanoseconds.test.d.ts.map +1 -0
  44. package/dist/addSeconds.d.ts +36 -0
  45. package/dist/addSeconds.d.ts.map +1 -0
  46. package/dist/addSeconds.js +8 -0
  47. package/dist/addSeconds.js.map +1 -0
  48. package/dist/addSeconds.test.d.ts +2 -0
  49. package/dist/addSeconds.test.d.ts.map +1 -0
  50. package/dist/addWeeks.d.ts +37 -0
  51. package/dist/addWeeks.d.ts.map +1 -0
  52. package/dist/addWeeks.js +8 -0
  53. package/dist/addWeeks.js.map +1 -0
  54. package/dist/addWeeks.test.d.ts +2 -0
  55. package/dist/addWeeks.test.d.ts.map +1 -0
  56. package/dist/addYears.d.ts +37 -0
  57. package/dist/addYears.d.ts.map +1 -0
  58. package/dist/addYears.js +8 -0
  59. package/dist/addYears.js.map +1 -0
  60. package/dist/addYears.test.d.ts +2 -0
  61. package/dist/addYears.test.d.ts.map +1 -0
  62. package/dist/chunk-2XHAHSB6.js +14 -0
  63. package/dist/chunk-2XHAHSB6.js.map +1 -0
  64. package/dist/chunk-4NJMCCUM.js +14 -0
  65. package/dist/chunk-4NJMCCUM.js.map +1 -0
  66. package/dist/chunk-52NEOY34.js +13 -0
  67. package/dist/chunk-52NEOY34.js.map +1 -0
  68. package/dist/chunk-7ATM7AXL.js +14 -0
  69. package/dist/chunk-7ATM7AXL.js.map +1 -0
  70. package/dist/chunk-A5VVBYNT.js +14 -0
  71. package/dist/chunk-A5VVBYNT.js.map +1 -0
  72. package/dist/chunk-ADQTZVMH.js +15 -0
  73. package/dist/chunk-ADQTZVMH.js.map +1 -0
  74. package/dist/chunk-AHMKY474.js +13 -0
  75. package/dist/chunk-AHMKY474.js.map +1 -0
  76. package/dist/chunk-BH2YB4MV.js +13 -0
  77. package/dist/chunk-BH2YB4MV.js.map +1 -0
  78. package/dist/chunk-BQBLSXK2.js +13 -0
  79. package/dist/chunk-BQBLSXK2.js.map +1 -0
  80. package/dist/chunk-CY746ZUQ.js +15 -0
  81. package/dist/chunk-CY746ZUQ.js.map +1 -0
  82. package/dist/chunk-DT2EWLHU.js +14 -0
  83. package/dist/chunk-DT2EWLHU.js.map +1 -0
  84. package/dist/chunk-EEQ3REET.js +15 -0
  85. package/dist/chunk-EEQ3REET.js.map +1 -0
  86. package/dist/chunk-EYO2ZJLH.js +14 -0
  87. package/dist/chunk-EYO2ZJLH.js.map +1 -0
  88. package/dist/chunk-HDBH7RTY.js +13 -0
  89. package/dist/chunk-HDBH7RTY.js.map +1 -0
  90. package/dist/chunk-ISHZRFVN.js +15 -0
  91. package/dist/chunk-ISHZRFVN.js.map +1 -0
  92. package/dist/chunk-J6G2I2TU.js +13 -0
  93. package/dist/chunk-J6G2I2TU.js.map +1 -0
  94. package/dist/chunk-JOD4ATPE.js +15 -0
  95. package/dist/chunk-JOD4ATPE.js.map +1 -0
  96. package/dist/chunk-L4SVABDH.js +14 -0
  97. package/dist/chunk-L4SVABDH.js.map +1 -0
  98. package/dist/chunk-LDO6PRNJ.js +15 -0
  99. package/dist/chunk-LDO6PRNJ.js.map +1 -0
  100. package/dist/chunk-NRD5HRZV.js +14 -0
  101. package/dist/chunk-NRD5HRZV.js.map +1 -0
  102. package/dist/chunk-PPB62JYV.js +15 -0
  103. package/dist/chunk-PPB62JYV.js.map +1 -0
  104. package/dist/chunk-Q2F3HEXB.js +14 -0
  105. package/dist/chunk-Q2F3HEXB.js.map +1 -0
  106. package/dist/chunk-S63QUP4W.js +15 -0
  107. package/dist/chunk-S63QUP4W.js.map +1 -0
  108. package/dist/chunk-U4RNUZXO.js +13 -0
  109. package/dist/chunk-U4RNUZXO.js.map +1 -0
  110. package/dist/chunk-V27NUBXQ.js +14 -0
  111. package/dist/chunk-V27NUBXQ.js.map +1 -0
  112. package/dist/chunk-VLZ3HQQA.js +15 -0
  113. package/dist/chunk-VLZ3HQQA.js.map +1 -0
  114. package/dist/chunk-WVHAYLBW.js +13 -0
  115. package/dist/chunk-WVHAYLBW.js.map +1 -0
  116. package/dist/{chunk-NL5LWPJI.js → chunk-XEDXPI5G.js} +4 -4
  117. package/dist/chunk-XW5MLXX5.js +13 -0
  118. package/dist/chunk-XW5MLXX5.js.map +1 -0
  119. package/dist/chunk-YKBP3G7L.js +13 -0
  120. package/dist/chunk-YKBP3G7L.js.map +1 -0
  121. package/dist/index.d.ts +29 -0
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +135 -19
  124. package/dist/intlFormatDistance.js +2 -2
  125. package/dist/isSameHour.d.ts +58 -0
  126. package/dist/isSameHour.d.ts.map +1 -0
  127. package/dist/isSameHour.js +8 -0
  128. package/dist/isSameHour.js.map +1 -0
  129. package/dist/isSameHour.test.d.ts +2 -0
  130. package/dist/isSameHour.test.d.ts.map +1 -0
  131. package/dist/isSameMicrosecond.d.ts +59 -0
  132. package/dist/isSameMicrosecond.d.ts.map +1 -0
  133. package/dist/isSameMicrosecond.js +8 -0
  134. package/dist/isSameMicrosecond.js.map +1 -0
  135. package/dist/isSameMicrosecond.test.d.ts +2 -0
  136. package/dist/isSameMicrosecond.test.d.ts.map +1 -0
  137. package/dist/isSameMillisecond.d.ts +59 -0
  138. package/dist/isSameMillisecond.d.ts.map +1 -0
  139. package/dist/isSameMillisecond.js +8 -0
  140. package/dist/isSameMillisecond.js.map +1 -0
  141. package/dist/isSameMillisecond.test.d.ts +2 -0
  142. package/dist/isSameMillisecond.test.d.ts.map +1 -0
  143. package/dist/isSameMinute.d.ts +58 -0
  144. package/dist/isSameMinute.d.ts.map +1 -0
  145. package/dist/isSameMinute.js +8 -0
  146. package/dist/isSameMinute.js.map +1 -0
  147. package/dist/isSameMinute.test.d.ts +2 -0
  148. package/dist/isSameMinute.test.d.ts.map +1 -0
  149. package/dist/isSameMonth.d.ts +58 -0
  150. package/dist/isSameMonth.d.ts.map +1 -0
  151. package/dist/isSameMonth.js +8 -0
  152. package/dist/isSameMonth.js.map +1 -0
  153. package/dist/isSameMonth.test.d.ts +2 -0
  154. package/dist/isSameMonth.test.d.ts.map +1 -0
  155. package/dist/isSameNanosecond.d.ts +59 -0
  156. package/dist/isSameNanosecond.d.ts.map +1 -0
  157. package/dist/isSameNanosecond.js +8 -0
  158. package/dist/isSameNanosecond.js.map +1 -0
  159. package/dist/isSameNanosecond.test.d.ts +2 -0
  160. package/dist/isSameNanosecond.test.d.ts.map +1 -0
  161. package/dist/isSameSecond.d.ts +59 -0
  162. package/dist/isSameSecond.d.ts.map +1 -0
  163. package/dist/isSameSecond.js +8 -0
  164. package/dist/isSameSecond.js.map +1 -0
  165. package/dist/isSameSecond.test.d.ts +2 -0
  166. package/dist/isSameSecond.test.d.ts.map +1 -0
  167. package/dist/isSameWeek.d.ts +72 -0
  168. package/dist/isSameWeek.d.ts.map +1 -0
  169. package/dist/isSameWeek.js +8 -0
  170. package/dist/isSameWeek.js.map +1 -0
  171. package/dist/isSameWeek.test.d.ts +2 -0
  172. package/dist/isSameWeek.test.d.ts.map +1 -0
  173. package/dist/isSameYear.d.ts +58 -0
  174. package/dist/isSameYear.d.ts.map +1 -0
  175. package/dist/isSameYear.js +8 -0
  176. package/dist/isSameYear.js.map +1 -0
  177. package/dist/isSameYear.test.d.ts +2 -0
  178. package/dist/isSameYear.test.d.ts.map +1 -0
  179. package/dist/subDays.d.ts +20 -0
  180. package/dist/subDays.d.ts.map +1 -0
  181. package/dist/subDays.js +9 -0
  182. package/dist/subDays.js.map +1 -0
  183. package/dist/subDays.test.d.ts +2 -0
  184. package/dist/subDays.test.d.ts.map +1 -0
  185. package/dist/subHours.d.ts +20 -0
  186. package/dist/subHours.d.ts.map +1 -0
  187. package/dist/subHours.js +9 -0
  188. package/dist/subHours.js.map +1 -0
  189. package/dist/subHours.test.d.ts +2 -0
  190. package/dist/subHours.test.d.ts.map +1 -0
  191. package/dist/subMicroseconds.d.ts +19 -0
  192. package/dist/subMicroseconds.d.ts.map +1 -0
  193. package/dist/subMicroseconds.js +9 -0
  194. package/dist/subMicroseconds.js.map +1 -0
  195. package/dist/subMicroseconds.test.d.ts +2 -0
  196. package/dist/subMicroseconds.test.d.ts.map +1 -0
  197. package/dist/subMilliseconds.d.ts +19 -0
  198. package/dist/subMilliseconds.d.ts.map +1 -0
  199. package/dist/subMilliseconds.js +9 -0
  200. package/dist/subMilliseconds.js.map +1 -0
  201. package/dist/subMilliseconds.test.d.ts +2 -0
  202. package/dist/subMilliseconds.test.d.ts.map +1 -0
  203. package/dist/subMinutes.d.ts +19 -0
  204. package/dist/subMinutes.d.ts.map +1 -0
  205. package/dist/subMinutes.js +9 -0
  206. package/dist/subMinutes.js.map +1 -0
  207. package/dist/subMinutes.test.d.ts +2 -0
  208. package/dist/subMinutes.test.d.ts.map +1 -0
  209. package/dist/subMonths.d.ts +20 -0
  210. package/dist/subMonths.d.ts.map +1 -0
  211. package/dist/subMonths.js +9 -0
  212. package/dist/subMonths.js.map +1 -0
  213. package/dist/subMonths.test.d.ts +2 -0
  214. package/dist/subMonths.test.d.ts.map +1 -0
  215. package/dist/subNanoseconds.d.ts +19 -0
  216. package/dist/subNanoseconds.d.ts.map +1 -0
  217. package/dist/subNanoseconds.js +9 -0
  218. package/dist/subNanoseconds.js.map +1 -0
  219. package/dist/subNanoseconds.test.d.ts +2 -0
  220. package/dist/subNanoseconds.test.d.ts.map +1 -0
  221. package/dist/subSeconds.d.ts +19 -0
  222. package/dist/subSeconds.d.ts.map +1 -0
  223. package/dist/subSeconds.js +9 -0
  224. package/dist/subSeconds.js.map +1 -0
  225. package/dist/subSeconds.test.d.ts +2 -0
  226. package/dist/subSeconds.test.d.ts.map +1 -0
  227. package/dist/subWeeks.d.ts +20 -0
  228. package/dist/subWeeks.d.ts.map +1 -0
  229. package/dist/subWeeks.js +9 -0
  230. package/dist/subWeeks.js.map +1 -0
  231. package/dist/subWeeks.test.d.ts +2 -0
  232. package/dist/subWeeks.test.d.ts.map +1 -0
  233. package/dist/subYears.d.ts +20 -0
  234. package/dist/subYears.d.ts.map +1 -0
  235. package/dist/subYears.js +9 -0
  236. package/dist/subYears.js.map +1 -0
  237. package/dist/subYears.test.d.ts +2 -0
  238. package/dist/subYears.test.d.ts.map +1 -0
  239. package/package.json +1 -1
  240. /package/dist/{chunk-NL5LWPJI.js.map → chunk-XEDXPI5G.js.map} +0 -0
package/README.md CHANGED
@@ -1,10 +1,10 @@
1
- # tiempo
1
+ # @gobrand/tiempo
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/@gobrand/tiempo.svg)](https://www.npmjs.com/package/@gobrand/tiempo)
4
4
  [![CI](https://github.com/go-brand/tiempo/actions/workflows/ci.yml/badge.svg)](https://github.com/go-brand/tiempo/actions/workflows/ci.yml)
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
6
 
7
- Lightweight utilities for timezones and datetimes with the [Temporal API](https://tc39.es/proposal-temporal/docs/).
7
+ Comprehensive datetime utilities for the [Temporal API](https://tc39.es/proposal-temporal/docs/). Full timezone support, nanosecond precision, and 54+ utility functions with a familiar API.
8
8
 
9
9
  ## Installation
10
10
 
@@ -18,12 +18,30 @@ yarn add @gobrand/tiempo
18
18
 
19
19
  ## Why tiempo?
20
20
 
21
- The Temporal API is powerful but requires understanding its various methods and objects. `tiempo` provides intuitive utilities for common datetime tasks: timezone conversions, formatting, start/end calculations, and comparisons. Whether you're converting UTC strings from your backend or formatting dates for display, tiempo makes working with timezones straightforward.
21
+ The Temporal API is powerful but requires understanding its various methods and objects. **tiempo** (`@gobrand/tiempo`) provides 54+ intuitive utilities for every datetime task:
22
+
23
+ - **🌍 Timezone conversions** - Convert between UTC and any timezone effortlessly
24
+ - **➕ Complete arithmetic** - Add/subtract any time unit from nanoseconds to years
25
+ - **📅 Calendar operations** - Start/end of day, week, month, year with DST handling
26
+ - **🔍 Comparisons** - Check if dates are before, after, same day, future, or past
27
+ - **📊 Differences** - Calculate precise differences in any time unit
28
+ - **🎨 Formatting** - Format dates with date-fns-style tokens or Intl
29
+ - **⚡️ Type-safe** - Full TypeScript support with proper Temporal types
30
+ - **🎯 Zero config** - Simple, direct function signatures
31
+
32
+ **Key features:**
33
+ - ✅ Native timezone support with Temporal API
34
+ - ✅ DST transitions handled automatically
35
+ - ✅ Nanosecond precision (beyond milliseconds)
36
+ - ✅ Calendar-aware arithmetic (leap years, month-end dates)
37
+ - ✅ Familiar date-fns-style API, built for the future
22
38
 
23
39
  **Perfect for:**
24
40
  - Social media scheduling apps
25
41
  - Calendar applications
26
42
  - Booking systems
43
+ - Time tracking tools
44
+ - Analytics dashboards
27
45
  - Any app that needs to handle user timezones
28
46
 
29
47
  ## Quick Start
@@ -346,6 +364,138 @@ startOfYear(zoned); // 2025-01-01T00:00:00-05:00[America/New_York]
346
364
  endOfYear(zoned); // 2025-12-31T23:59:59.999999999-05:00[America/New_York]
347
365
  ```
348
366
 
367
+ ### Addition/Subtraction Utilities
368
+
369
+ tiempo provides comprehensive datetime arithmetic functions for all time units, from nanoseconds to years. All functions:
370
+ - Accept `Temporal.Instant` or `Temporal.ZonedDateTime` as input
371
+ - Return `Temporal.ZonedDateTime` preserving the original timezone
372
+ - Properly handle DST transitions, leap years, and month-end edge cases
373
+ - Support negative values for subtraction
374
+
375
+ #### Addition Functions
376
+
377
+ ##### `addYears(input, years)` / `addMonths(input, months)` / `addWeeks(input, weeks)` / `addDays(input, days)`
378
+
379
+ Add calendar units (years, months, weeks, or days) to a datetime.
380
+
381
+ ```typescript
382
+ import { addYears, addMonths, addWeeks, addDays } from '@gobrand/tiempo';
383
+
384
+ const date = Temporal.Instant.from('2025-01-20T12:00:00Z');
385
+
386
+ addYears(date, 2); // 2027-01-20T12:00:00Z[UTC] (2 years later)
387
+ addMonths(date, 3); // 2025-04-20T12:00:00Z[UTC] (3 months later)
388
+ addWeeks(date, 2); // 2025-02-03T12:00:00Z[UTC] (2 weeks later)
389
+ addDays(date, 5); // 2025-01-25T12:00:00Z[UTC] (5 days later)
390
+
391
+ // Handle month-end edge cases automatically
392
+ const endOfJan = Temporal.Instant.from('2025-01-31T12:00:00Z');
393
+ addMonths(endOfJan, 1); // 2025-02-28T12:00:00Z[UTC] (Jan 31 → Feb 28)
394
+
395
+ // Negative values subtract
396
+ addMonths(date, -3); // 2024-10-20T12:00:00Z[UTC] (3 months earlier)
397
+ ```
398
+
399
+ ##### `addHours(input, hours)` / `addMinutes(input, minutes)` / `addSeconds(input, seconds)`
400
+
401
+ Add time units (hours, minutes, or seconds) to a datetime.
402
+
403
+ ```typescript
404
+ import { addHours, addMinutes, addSeconds } from '@gobrand/tiempo';
405
+
406
+ const time = Temporal.Instant.from('2025-01-20T12:00:00Z');
407
+
408
+ addHours(time, 3); // 2025-01-20T15:00:00Z[UTC] (3 hours later)
409
+ addMinutes(time, 30); // 2025-01-20T12:30:00Z[UTC] (30 minutes later)
410
+ addSeconds(time, 45); // 2025-01-20T12:00:45Z[UTC] (45 seconds later)
411
+
412
+ // Works with ZonedDateTime and preserves timezone
413
+ const ny = Temporal.ZonedDateTime.from('2025-01-20T15:00:00-05:00[America/New_York]');
414
+ addHours(ny, 2); // 2025-01-20T17:00:00-05:00[America/New_York]
415
+ ```
416
+
417
+ ##### `addMilliseconds(input, ms)` / `addMicroseconds(input, μs)` / `addNanoseconds(input, ns)`
418
+
419
+ Add sub-second precision units (milliseconds, microseconds, or nanoseconds) to a datetime.
420
+
421
+ ```typescript
422
+ import { addMilliseconds, addMicroseconds, addNanoseconds } from '@gobrand/tiempo';
423
+
424
+ const precise = Temporal.Instant.from('2025-01-20T12:00:00Z');
425
+
426
+ addMilliseconds(precise, 500); // 2025-01-20T12:00:00.500Z[UTC]
427
+ addMicroseconds(precise, 500); // 2025-01-20T12:00:00.000500Z[UTC]
428
+ addNanoseconds(precise, 500); // 2025-01-20T12:00:00.000000500Z[UTC]
429
+ ```
430
+
431
+ #### Subtraction Functions
432
+
433
+ All subtraction functions are convenience wrappers that call their corresponding addition functions with negated values.
434
+
435
+ ##### `subYears(input, years)` / `subMonths(input, months)` / `subWeeks(input, weeks)` / `subDays(input, days)`
436
+
437
+ ```typescript
438
+ import { subYears, subMonths, subWeeks, subDays } from '@gobrand/tiempo';
439
+
440
+ const date = Temporal.Instant.from('2025-01-20T12:00:00Z');
441
+
442
+ subYears(date, 2); // 2023-01-20T12:00:00Z[UTC] (2 years earlier)
443
+ subMonths(date, 3); // 2024-10-20T12:00:00Z[UTC] (3 months earlier)
444
+ subWeeks(date, 2); // 2025-01-06T12:00:00Z[UTC] (2 weeks earlier)
445
+ subDays(date, 5); // 2025-01-15T12:00:00Z[UTC] (5 days earlier)
446
+ ```
447
+
448
+ ##### `subHours(input, hours)` / `subMinutes(input, minutes)` / `subSeconds(input, seconds)`
449
+
450
+ ```typescript
451
+ import { subHours, subMinutes, subSeconds } from '@gobrand/tiempo';
452
+
453
+ const time = Temporal.Instant.from('2025-01-20T12:00:00Z');
454
+
455
+ subHours(time, 3); // 2025-01-20T09:00:00Z[UTC] (3 hours earlier)
456
+ subMinutes(time, 30); // 2025-01-20T11:30:00Z[UTC] (30 minutes earlier)
457
+ subSeconds(time, 45); // 2025-01-20T11:59:15Z[UTC] (45 seconds earlier)
458
+ ```
459
+
460
+ ##### `subMilliseconds(input, ms)` / `subMicroseconds(input, μs)` / `subNanoseconds(input, ns)`
461
+
462
+ ```typescript
463
+ import { subMilliseconds, subMicroseconds, subNanoseconds } from '@gobrand/tiempo';
464
+
465
+ const precise = Temporal.Instant.from('2025-01-20T12:00:00.500Z');
466
+
467
+ subMilliseconds(precise, 250); // 2025-01-20T12:00:00.250Z[UTC]
468
+ subMicroseconds(precise, 250); // 2025-01-20T12:00:00.499750Z[UTC]
469
+ subNanoseconds(precise, 250); // 2025-01-20T12:00:00.499999750Z[UTC]
470
+ ```
471
+
472
+ #### Real-world Example: Meeting Scheduler
473
+
474
+ ```typescript
475
+ import {
476
+ toZonedTime,
477
+ addDays,
478
+ addMinutes,
479
+ format
480
+ } from '@gobrand/tiempo';
481
+
482
+ // User's current meeting time
483
+ const meeting = toZonedTime('2025-01-20T15:00:00Z', 'America/New_York');
484
+ // 2025-01-20T10:00:00-05:00[America/New_York] (10 AM in NY)
485
+
486
+ // Reschedule to tomorrow, same time
487
+ const tomorrow = addDays(meeting, 1);
488
+ format(tomorrow, 'EEEE, MMMM do'); // "Tuesday, January 21st"
489
+
490
+ // Add 30-minute buffer before the meeting
491
+ const arriveBy = subMinutes(tomorrow, 30);
492
+ format(arriveBy, 'h:mm a'); // "9:30 AM"
493
+
494
+ // Schedule follow-up 2 weeks later
495
+ const followUp = addWeeks(tomorrow, 2);
496
+ format(followUp, 'MMM d'); // "Feb 4"
497
+ ```
498
+
349
499
  ### Comparison Utilities
350
500
 
351
501
  #### `isBefore(date1, date2)` / `isAfter(date1, date2)`
@@ -550,12 +700,21 @@ const instant2 = Temporal.Instant.from('2025-01-20T23:00:00Z');
550
700
  isSameDay(instant1, instant2); // true (both Jan 20 in UTC)
551
701
  ```
552
702
 
553
- ## Real World Example
703
+ ## Real World Examples
554
704
 
555
- This example demonstrates the complete workflow of working with datetimes in a frontend application: receiving a UTC ISO 8601 string from your backend, converting it to a Temporal object in the user's timezone, formatting it for display, manipulating it based on user input, and sending it back to your backend as a UTC ISO 8601 string.
705
+ ### Example 1: Social Media Post Scheduler
706
+
707
+ This example demonstrates the complete workflow of working with datetimes in a frontend application: receiving a UTC ISO 8601 string from your backend, converting it to a Temporal object in the user's timezone, formatting it for display, manipulating it with tiempo's arithmetic functions, and sending it back to your backend as a UTC ISO 8601 string.
556
708
 
557
709
  ```typescript
558
- import { toZonedTime, toUtcString, format } from '@gobrand/tiempo';
710
+ import {
711
+ toZonedTime,
712
+ toUtcString,
713
+ format,
714
+ addDays,
715
+ addHours,
716
+ subMinutes
717
+ } from '@gobrand/tiempo';
559
718
 
560
719
  // 1. Receive UTC ISO 8601 string from backend
561
720
  const scheduledAtUTC = "2025-01-20T20:00:00.000Z";
@@ -568,16 +727,53 @@ const zonedDateTime = toZonedTime(scheduledAtUTC, userTimezone);
568
727
  const displayTime = format(zonedDateTime, "EEEE, MMMM do 'at' h:mm a");
569
728
  console.log(displayTime); // "Monday, January 20th at 3:00 PM"
570
729
 
571
- // 4. User reschedules to 4:00 PM their time
572
- const updatedZoned = zonedDateTime.with({ hour: 16 });
730
+ // 4. User wants to reschedule to tomorrow, 2 hours later
731
+ const tomorrow = addDays(zonedDateTime, 1);
732
+ const twoHoursLater = addHours(tomorrow, 2);
573
733
 
574
734
  // 5. Format the updated time for confirmation
575
- const confirmTime = format(updatedZoned, "h:mm a");
576
- console.log(`Rescheduled to ${confirmTime}`); // "Rescheduled to 4:00 PM"
735
+ const confirmTime = format(twoHoursLater, "EEEE 'at' h:mm a");
736
+ console.log(`Rescheduled to ${confirmTime}`); // "Tuesday at 5:00 PM"
577
737
 
578
738
  // 6. Convert back to UTC ISO 8601 string for backend
579
- const updatedUTC = toUtcString(updatedZoned);
580
- console.log(updatedUTC); // "2025-01-20T21:00:00Z"
739
+ const updatedUTC = toUtcString(twoHoursLater);
740
+ console.log(updatedUTC); // "2025-01-21T22:00:00Z"
741
+ ```
742
+
743
+ ### Example 2: Meeting Reminder System
744
+
745
+ ```typescript
746
+ import {
747
+ toZonedTime,
748
+ format,
749
+ subMinutes,
750
+ subHours,
751
+ differenceInMinutes,
752
+ isFuture
753
+ } from '@gobrand/tiempo';
754
+
755
+ // Meeting scheduled for 2 PM
756
+ const meeting = toZonedTime('2025-01-20T19:00:00Z', 'America/New_York');
757
+ // 2025-01-20T14:00:00-05:00[America/New_York]
758
+
759
+ // Send reminders at multiple intervals
760
+ const reminders = [
761
+ { time: subMinutes(meeting, 15), label: '15 minutes before' },
762
+ { time: subHours(meeting, 1), label: '1 hour before' },
763
+ { time: subHours(meeting, 24), label: '1 day before' },
764
+ ];
765
+
766
+ reminders.forEach(({ time, label }) => {
767
+ if (isFuture(time)) {
768
+ const formatted = format(time, 'MMM d, h:mm a');
769
+ console.log(`Send reminder "${label}" at ${formatted}`);
770
+ }
771
+ });
772
+
773
+ // Calculate time until meeting
774
+ const now = Temporal.Now.zonedDateTimeISO('America/New_York');
775
+ const minutesUntil = differenceInMinutes(meeting, now);
776
+ console.log(`Meeting starts in ${minutesUntil} minutes`);
581
777
  ```
582
778
 
583
779
  ## Browser Support
@@ -0,0 +1,37 @@
1
+ import type { Temporal } from '@js-temporal/polyfill';
2
+ /**
3
+ * Adds the specified number of days to a datetime.
4
+ *
5
+ * Properly handles DST transitions and calendar edge cases through Temporal API.
6
+ * Instant inputs are converted to UTC. For ZonedDateTime inputs, their timezone is preserved.
7
+ *
8
+ * @param input - A Temporal.Instant (UTC) or Temporal.ZonedDateTime
9
+ * @param days - Number of days to add (can be negative to subtract)
10
+ * @returns ZonedDateTime with days added, in the same timezone as input
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * // From Instant (always UTC)
15
+ * const instant = Temporal.Instant.from('2025-01-20T12:00:00Z');
16
+ * const result = addDays(instant, 5);
17
+ * // 2025-01-25T12:00:00Z[UTC] (5 days later)
18
+ * ```
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * // From ZonedDateTime (preserves timezone)
23
+ * const zoned = Temporal.ZonedDateTime.from('2025-01-20T15:30:00-05:00[America/New_York]');
24
+ * const result = addDays(zoned, 10);
25
+ * // 2025-01-30T15:30:00-05:00[America/New_York]
26
+ * ```
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * // Negative values subtract days
31
+ * const instant = Temporal.Instant.from('2025-01-20T12:00:00Z');
32
+ * const result = addDays(instant, -7);
33
+ * // 2025-01-13T12:00:00Z[UTC] (7 days earlier)
34
+ * ```
35
+ */
36
+ export declare function addDays(input: Temporal.Instant | Temporal.ZonedDateTime, days: number): Temporal.ZonedDateTime;
37
+ //# sourceMappingURL=addDays.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addDays.d.ts","sourceRoot":"","sources":["../src/addDays.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,OAAO,CACrB,KAAK,EAAE,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,EAChD,IAAI,EAAE,MAAM,GACX,QAAQ,CAAC,aAAa,CAGxB"}
@@ -0,0 +1,8 @@
1
+ import {
2
+ addDays
3
+ } from "./chunk-L4SVABDH.js";
4
+ import "./chunk-MJSZNWCV.js";
5
+ export {
6
+ addDays
7
+ };
8
+ //# sourceMappingURL=addDays.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=addDays.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addDays.test.d.ts","sourceRoot":"","sources":["../src/addDays.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ import type { Temporal } from '@js-temporal/polyfill';
2
+ /**
3
+ * Adds the specified number of hours to a datetime.
4
+ *
5
+ * Properly handles DST transitions through Temporal API.
6
+ * Instant inputs are converted to UTC. For ZonedDateTime inputs, their timezone is preserved.
7
+ *
8
+ * @param input - A Temporal.Instant (UTC) or Temporal.ZonedDateTime
9
+ * @param hours - Number of hours to add (can be negative to subtract)
10
+ * @returns ZonedDateTime with hours added, in the same timezone as input
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * // From Instant (always UTC)
15
+ * const instant = Temporal.Instant.from('2025-01-20T12:00:00Z');
16
+ * const result = addHours(instant, 3);
17
+ * // 2025-01-20T15:00:00Z[UTC] (3 hours later)
18
+ * ```
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * // From ZonedDateTime (preserves timezone)
23
+ * const zoned = Temporal.ZonedDateTime.from('2025-01-20T15:30:00-05:00[America/New_York]');
24
+ * const result = addHours(zoned, 24);
25
+ * // 2025-01-21T15:30:00-05:00[America/New_York]
26
+ * ```
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * // Negative values subtract hours
31
+ * const instant = Temporal.Instant.from('2025-01-20T12:00:00Z');
32
+ * const result = addHours(instant, -5);
33
+ * // 2025-01-20T07:00:00Z[UTC] (5 hours earlier)
34
+ * ```
35
+ */
36
+ export declare function addHours(input: Temporal.Instant | Temporal.ZonedDateTime, hours: number): Temporal.ZonedDateTime;
37
+ //# sourceMappingURL=addHours.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addHours.d.ts","sourceRoot":"","sources":["../src/addHours.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,EAChD,KAAK,EAAE,MAAM,GACZ,QAAQ,CAAC,aAAa,CAGxB"}
@@ -0,0 +1,8 @@
1
+ import {
2
+ addHours
3
+ } from "./chunk-4NJMCCUM.js";
4
+ import "./chunk-MJSZNWCV.js";
5
+ export {
6
+ addHours
7
+ };
8
+ //# sourceMappingURL=addHours.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=addHours.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addHours.test.d.ts","sourceRoot":"","sources":["../src/addHours.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import type { Temporal } from '@js-temporal/polyfill';
2
+ /**
3
+ * Adds the specified number of microseconds to a datetime.
4
+ *
5
+ * Instant inputs are converted to UTC. For ZonedDateTime inputs, their timezone is preserved.
6
+ *
7
+ * @param input - A Temporal.Instant (UTC) or Temporal.ZonedDateTime
8
+ * @param microseconds - Number of microseconds to add (can be negative to subtract)
9
+ * @returns ZonedDateTime with microseconds added, in the same timezone as input
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * // From Instant (always UTC)
14
+ * const instant = Temporal.Instant.from('2025-01-20T12:00:00Z');
15
+ * const result = addMicroseconds(instant, 500);
16
+ * // 2025-01-20T12:00:00.000500Z[UTC] (500 microseconds later)
17
+ * ```
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * // From ZonedDateTime (preserves timezone)
22
+ * const zoned = Temporal.ZonedDateTime.from('2025-01-20T15:30:00-05:00[America/New_York]');
23
+ * const result = addMicroseconds(zoned, 1000);
24
+ * // 2025-01-20T15:30:00.001-05:00[America/New_York]
25
+ * ```
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * // Negative values subtract microseconds
30
+ * const instant = Temporal.Instant.from('2025-01-20T12:00:00.001Z');
31
+ * const result = addMicroseconds(instant, -500);
32
+ * // 2025-01-20T12:00:00.000500Z[UTC] (500 microseconds earlier)
33
+ * ```
34
+ */
35
+ export declare function addMicroseconds(input: Temporal.Instant | Temporal.ZonedDateTime, microseconds: number): Temporal.ZonedDateTime;
36
+ //# sourceMappingURL=addMicroseconds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addMicroseconds.d.ts","sourceRoot":"","sources":["../src/addMicroseconds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,EAChD,YAAY,EAAE,MAAM,GACnB,QAAQ,CAAC,aAAa,CAGxB"}
@@ -0,0 +1,8 @@
1
+ import {
2
+ addMicroseconds
3
+ } from "./chunk-V27NUBXQ.js";
4
+ import "./chunk-MJSZNWCV.js";
5
+ export {
6
+ addMicroseconds
7
+ };
8
+ //# sourceMappingURL=addMicroseconds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=addMicroseconds.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addMicroseconds.test.d.ts","sourceRoot":"","sources":["../src/addMicroseconds.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import type { Temporal } from '@js-temporal/polyfill';
2
+ /**
3
+ * Adds the specified number of milliseconds to a datetime.
4
+ *
5
+ * Instant inputs are converted to UTC. For ZonedDateTime inputs, their timezone is preserved.
6
+ *
7
+ * @param input - A Temporal.Instant (UTC) or Temporal.ZonedDateTime
8
+ * @param milliseconds - Number of milliseconds to add (can be negative to subtract)
9
+ * @returns ZonedDateTime with milliseconds added, in the same timezone as input
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * // From Instant (always UTC)
14
+ * const instant = Temporal.Instant.from('2025-01-20T12:00:00Z');
15
+ * const result = addMilliseconds(instant, 500);
16
+ * // 2025-01-20T12:00:00.500Z[UTC] (500 milliseconds later)
17
+ * ```
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * // From ZonedDateTime (preserves timezone)
22
+ * const zoned = Temporal.ZonedDateTime.from('2025-01-20T15:30:00-05:00[America/New_York]');
23
+ * const result = addMilliseconds(zoned, 1500);
24
+ * // 2025-01-20T15:30:01.500-05:00[America/New_York]
25
+ * ```
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * // Negative values subtract milliseconds
30
+ * const instant = Temporal.Instant.from('2025-01-20T12:00:00.500Z');
31
+ * const result = addMilliseconds(instant, -250);
32
+ * // 2025-01-20T12:00:00.250Z[UTC] (250 milliseconds earlier)
33
+ * ```
34
+ */
35
+ export declare function addMilliseconds(input: Temporal.Instant | Temporal.ZonedDateTime, milliseconds: number): Temporal.ZonedDateTime;
36
+ //# sourceMappingURL=addMilliseconds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addMilliseconds.d.ts","sourceRoot":"","sources":["../src/addMilliseconds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,EAChD,YAAY,EAAE,MAAM,GACnB,QAAQ,CAAC,aAAa,CAGxB"}
@@ -0,0 +1,8 @@
1
+ import {
2
+ addMilliseconds
3
+ } from "./chunk-A5VVBYNT.js";
4
+ import "./chunk-MJSZNWCV.js";
5
+ export {
6
+ addMilliseconds
7
+ };
8
+ //# sourceMappingURL=addMilliseconds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=addMilliseconds.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addMilliseconds.test.d.ts","sourceRoot":"","sources":["../src/addMilliseconds.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import type { Temporal } from '@js-temporal/polyfill';
2
+ /**
3
+ * Adds the specified number of minutes to a datetime.
4
+ *
5
+ * Instant inputs are converted to UTC. For ZonedDateTime inputs, their timezone is preserved.
6
+ *
7
+ * @param input - A Temporal.Instant (UTC) or Temporal.ZonedDateTime
8
+ * @param minutes - Number of minutes to add (can be negative to subtract)
9
+ * @returns ZonedDateTime with minutes added, in the same timezone as input
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * // From Instant (always UTC)
14
+ * const instant = Temporal.Instant.from('2025-01-20T12:00:00Z');
15
+ * const result = addMinutes(instant, 30);
16
+ * // 2025-01-20T12:30:00Z[UTC] (30 minutes later)
17
+ * ```
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * // From ZonedDateTime (preserves timezone)
22
+ * const zoned = Temporal.ZonedDateTime.from('2025-01-20T15:30:00-05:00[America/New_York]');
23
+ * const result = addMinutes(zoned, 90);
24
+ * // 2025-01-20T17:00:00-05:00[America/New_York]
25
+ * ```
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * // Negative values subtract minutes
30
+ * const instant = Temporal.Instant.from('2025-01-20T12:00:00Z');
31
+ * const result = addMinutes(instant, -15);
32
+ * // 2025-01-20T11:45:00Z[UTC] (15 minutes earlier)
33
+ * ```
34
+ */
35
+ export declare function addMinutes(input: Temporal.Instant | Temporal.ZonedDateTime, minutes: number): Temporal.ZonedDateTime;
36
+ //# sourceMappingURL=addMinutes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addMinutes.d.ts","sourceRoot":"","sources":["../src/addMinutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,EAChD,OAAO,EAAE,MAAM,GACd,QAAQ,CAAC,aAAa,CAGxB"}
@@ -0,0 +1,8 @@
1
+ import {
2
+ addMinutes
3
+ } from "./chunk-2XHAHSB6.js";
4
+ import "./chunk-MJSZNWCV.js";
5
+ export {
6
+ addMinutes
7
+ };
8
+ //# sourceMappingURL=addMinutes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=addMinutes.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addMinutes.test.d.ts","sourceRoot":"","sources":["../src/addMinutes.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ import type { Temporal } from '@js-temporal/polyfill';
2
+ /**
3
+ * Adds the specified number of months to a datetime.
4
+ *
5
+ * Properly handles month-end dates and calendar edge cases through Temporal API.
6
+ * Instant inputs are converted to UTC. For ZonedDateTime inputs, their timezone is preserved.
7
+ *
8
+ * @param input - A Temporal.Instant (UTC) or Temporal.ZonedDateTime
9
+ * @param months - Number of months to add (can be negative to subtract)
10
+ * @returns ZonedDateTime with months added, in the same timezone as input
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * // From Instant (always UTC)
15
+ * const instant = Temporal.Instant.from('2025-01-20T12:00:00Z');
16
+ * const result = addMonths(instant, 3);
17
+ * // 2025-04-20T12:00:00Z[UTC] (3 months later)
18
+ * ```
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * // From ZonedDateTime (preserves timezone)
23
+ * const zoned = Temporal.ZonedDateTime.from('2025-01-20T15:30:00-05:00[America/New_York]');
24
+ * const result = addMonths(zoned, 6);
25
+ * // 2025-07-20T15:30:00-04:00[America/New_York]
26
+ * ```
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * // Month-end handling
31
+ * const instant = Temporal.Instant.from('2025-01-31T12:00:00Z');
32
+ * const result = addMonths(instant, 1);
33
+ * // 2025-02-28T12:00:00Z[UTC] (Jan 31 → Feb 28)
34
+ * ```
35
+ */
36
+ export declare function addMonths(input: Temporal.Instant | Temporal.ZonedDateTime, months: number): Temporal.ZonedDateTime;
37
+ //# sourceMappingURL=addMonths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addMonths.d.ts","sourceRoot":"","sources":["../src/addMonths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,EAChD,MAAM,EAAE,MAAM,GACb,QAAQ,CAAC,aAAa,CAGxB"}
@@ -0,0 +1,8 @@
1
+ import {
2
+ addMonths
3
+ } from "./chunk-7ATM7AXL.js";
4
+ import "./chunk-MJSZNWCV.js";
5
+ export {
6
+ addMonths
7
+ };
8
+ //# sourceMappingURL=addMonths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=addMonths.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addMonths.test.d.ts","sourceRoot":"","sources":["../src/addMonths.test.ts"],"names":[],"mappings":""}