@gobrand/tiempo 2.2.3 → 2.3.1

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 (260) hide show
  1. package/README.md +297 -24
  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-KD5GEHUA.js → chunk-2MP3ESL7.js} +4 -1
  63. package/dist/chunk-2MP3ESL7.js.map +1 -0
  64. package/dist/chunk-2XHAHSB6.js +14 -0
  65. package/dist/chunk-2XHAHSB6.js.map +1 -0
  66. package/dist/chunk-4NJMCCUM.js +14 -0
  67. package/dist/chunk-4NJMCCUM.js.map +1 -0
  68. package/dist/chunk-52NEOY34.js +13 -0
  69. package/dist/chunk-52NEOY34.js.map +1 -0
  70. package/dist/chunk-7ATM7AXL.js +14 -0
  71. package/dist/chunk-7ATM7AXL.js.map +1 -0
  72. package/dist/chunk-A5VVBYNT.js +14 -0
  73. package/dist/chunk-A5VVBYNT.js.map +1 -0
  74. package/dist/chunk-ADQTZVMH.js +15 -0
  75. package/dist/chunk-ADQTZVMH.js.map +1 -0
  76. package/dist/chunk-AHMKY474.js +13 -0
  77. package/dist/chunk-AHMKY474.js.map +1 -0
  78. package/dist/chunk-BH2YB4MV.js +13 -0
  79. package/dist/chunk-BH2YB4MV.js.map +1 -0
  80. package/dist/chunk-BQBLSXK2.js +13 -0
  81. package/dist/chunk-BQBLSXK2.js.map +1 -0
  82. package/dist/{chunk-GPAFAHKJ.js → chunk-BW5SFCKS.js} +4 -1
  83. package/dist/chunk-BW5SFCKS.js.map +1 -0
  84. package/dist/chunk-CY746ZUQ.js +15 -0
  85. package/dist/chunk-CY746ZUQ.js.map +1 -0
  86. package/dist/chunk-DT2EWLHU.js +14 -0
  87. package/dist/chunk-DT2EWLHU.js.map +1 -0
  88. package/dist/chunk-EEQ3REET.js +15 -0
  89. package/dist/chunk-EEQ3REET.js.map +1 -0
  90. package/dist/chunk-EYO2ZJLH.js +14 -0
  91. package/dist/chunk-EYO2ZJLH.js.map +1 -0
  92. package/dist/chunk-HDBH7RTY.js +13 -0
  93. package/dist/chunk-HDBH7RTY.js.map +1 -0
  94. package/dist/chunk-ISHZRFVN.js +15 -0
  95. package/dist/chunk-ISHZRFVN.js.map +1 -0
  96. package/dist/chunk-J6G2I2TU.js +13 -0
  97. package/dist/chunk-J6G2I2TU.js.map +1 -0
  98. package/dist/chunk-JOD4ATPE.js +15 -0
  99. package/dist/chunk-JOD4ATPE.js.map +1 -0
  100. package/dist/chunk-L4SVABDH.js +14 -0
  101. package/dist/chunk-L4SVABDH.js.map +1 -0
  102. package/dist/chunk-LDO6PRNJ.js +15 -0
  103. package/dist/chunk-LDO6PRNJ.js.map +1 -0
  104. package/dist/chunk-NRD5HRZV.js +14 -0
  105. package/dist/chunk-NRD5HRZV.js.map +1 -0
  106. package/dist/chunk-PPB62JYV.js +15 -0
  107. package/dist/chunk-PPB62JYV.js.map +1 -0
  108. package/dist/chunk-Q2F3HEXB.js +14 -0
  109. package/dist/chunk-Q2F3HEXB.js.map +1 -0
  110. package/dist/chunk-S63QUP4W.js +15 -0
  111. package/dist/chunk-S63QUP4W.js.map +1 -0
  112. package/dist/chunk-TGKWBQ7L.js +13 -0
  113. package/dist/chunk-TGKWBQ7L.js.map +1 -0
  114. package/dist/chunk-U4RNUZXO.js +13 -0
  115. package/dist/chunk-U4RNUZXO.js.map +1 -0
  116. package/dist/chunk-V27NUBXQ.js +14 -0
  117. package/dist/chunk-V27NUBXQ.js.map +1 -0
  118. package/dist/chunk-VLZ3HQQA.js +15 -0
  119. package/dist/chunk-VLZ3HQQA.js.map +1 -0
  120. package/dist/chunk-WVHAYLBW.js +13 -0
  121. package/dist/chunk-WVHAYLBW.js.map +1 -0
  122. package/dist/{chunk-NL5LWPJI.js → chunk-XEDXPI5G.js} +4 -4
  123. package/dist/chunk-XW5MLXX5.js +13 -0
  124. package/dist/chunk-XW5MLXX5.js.map +1 -0
  125. package/dist/chunk-YKBP3G7L.js +13 -0
  126. package/dist/chunk-YKBP3G7L.js.map +1 -0
  127. package/dist/index.d.ts +30 -0
  128. package/dist/index.d.ts.map +1 -1
  129. package/dist/index.js +139 -19
  130. package/dist/intlFormatDistance.js +2 -2
  131. package/dist/isSameHour.d.ts +58 -0
  132. package/dist/isSameHour.d.ts.map +1 -0
  133. package/dist/isSameHour.js +8 -0
  134. package/dist/isSameHour.js.map +1 -0
  135. package/dist/isSameHour.test.d.ts +2 -0
  136. package/dist/isSameHour.test.d.ts.map +1 -0
  137. package/dist/isSameMicrosecond.d.ts +59 -0
  138. package/dist/isSameMicrosecond.d.ts.map +1 -0
  139. package/dist/isSameMicrosecond.js +8 -0
  140. package/dist/isSameMicrosecond.js.map +1 -0
  141. package/dist/isSameMicrosecond.test.d.ts +2 -0
  142. package/dist/isSameMicrosecond.test.d.ts.map +1 -0
  143. package/dist/isSameMillisecond.d.ts +59 -0
  144. package/dist/isSameMillisecond.d.ts.map +1 -0
  145. package/dist/isSameMillisecond.js +8 -0
  146. package/dist/isSameMillisecond.js.map +1 -0
  147. package/dist/isSameMillisecond.test.d.ts +2 -0
  148. package/dist/isSameMillisecond.test.d.ts.map +1 -0
  149. package/dist/isSameMinute.d.ts +58 -0
  150. package/dist/isSameMinute.d.ts.map +1 -0
  151. package/dist/isSameMinute.js +8 -0
  152. package/dist/isSameMinute.js.map +1 -0
  153. package/dist/isSameMinute.test.d.ts +2 -0
  154. package/dist/isSameMinute.test.d.ts.map +1 -0
  155. package/dist/isSameMonth.d.ts +58 -0
  156. package/dist/isSameMonth.d.ts.map +1 -0
  157. package/dist/isSameMonth.js +8 -0
  158. package/dist/isSameMonth.js.map +1 -0
  159. package/dist/isSameMonth.test.d.ts +2 -0
  160. package/dist/isSameMonth.test.d.ts.map +1 -0
  161. package/dist/isSameNanosecond.d.ts +59 -0
  162. package/dist/isSameNanosecond.d.ts.map +1 -0
  163. package/dist/isSameNanosecond.js +8 -0
  164. package/dist/isSameNanosecond.js.map +1 -0
  165. package/dist/isSameNanosecond.test.d.ts +2 -0
  166. package/dist/isSameNanosecond.test.d.ts.map +1 -0
  167. package/dist/isSameSecond.d.ts +59 -0
  168. package/dist/isSameSecond.d.ts.map +1 -0
  169. package/dist/isSameSecond.js +8 -0
  170. package/dist/isSameSecond.js.map +1 -0
  171. package/dist/isSameSecond.test.d.ts +2 -0
  172. package/dist/isSameSecond.test.d.ts.map +1 -0
  173. package/dist/isSameWeek.d.ts +72 -0
  174. package/dist/isSameWeek.d.ts.map +1 -0
  175. package/dist/isSameWeek.js +8 -0
  176. package/dist/isSameWeek.js.map +1 -0
  177. package/dist/isSameWeek.test.d.ts +2 -0
  178. package/dist/isSameWeek.test.d.ts.map +1 -0
  179. package/dist/isSameYear.d.ts +58 -0
  180. package/dist/isSameYear.d.ts.map +1 -0
  181. package/dist/isSameYear.js +8 -0
  182. package/dist/isSameYear.js.map +1 -0
  183. package/dist/isSameYear.test.d.ts +2 -0
  184. package/dist/isSameYear.test.d.ts.map +1 -0
  185. package/dist/subDays.d.ts +20 -0
  186. package/dist/subDays.d.ts.map +1 -0
  187. package/dist/subDays.js +9 -0
  188. package/dist/subDays.js.map +1 -0
  189. package/dist/subDays.test.d.ts +2 -0
  190. package/dist/subDays.test.d.ts.map +1 -0
  191. package/dist/subHours.d.ts +20 -0
  192. package/dist/subHours.d.ts.map +1 -0
  193. package/dist/subHours.js +9 -0
  194. package/dist/subHours.js.map +1 -0
  195. package/dist/subHours.test.d.ts +2 -0
  196. package/dist/subHours.test.d.ts.map +1 -0
  197. package/dist/subMicroseconds.d.ts +19 -0
  198. package/dist/subMicroseconds.d.ts.map +1 -0
  199. package/dist/subMicroseconds.js +9 -0
  200. package/dist/subMicroseconds.js.map +1 -0
  201. package/dist/subMicroseconds.test.d.ts +2 -0
  202. package/dist/subMicroseconds.test.d.ts.map +1 -0
  203. package/dist/subMilliseconds.d.ts +19 -0
  204. package/dist/subMilliseconds.d.ts.map +1 -0
  205. package/dist/subMilliseconds.js +9 -0
  206. package/dist/subMilliseconds.js.map +1 -0
  207. package/dist/subMilliseconds.test.d.ts +2 -0
  208. package/dist/subMilliseconds.test.d.ts.map +1 -0
  209. package/dist/subMinutes.d.ts +19 -0
  210. package/dist/subMinutes.d.ts.map +1 -0
  211. package/dist/subMinutes.js +9 -0
  212. package/dist/subMinutes.js.map +1 -0
  213. package/dist/subMinutes.test.d.ts +2 -0
  214. package/dist/subMinutes.test.d.ts.map +1 -0
  215. package/dist/subMonths.d.ts +20 -0
  216. package/dist/subMonths.d.ts.map +1 -0
  217. package/dist/subMonths.js +9 -0
  218. package/dist/subMonths.js.map +1 -0
  219. package/dist/subMonths.test.d.ts +2 -0
  220. package/dist/subMonths.test.d.ts.map +1 -0
  221. package/dist/subNanoseconds.d.ts +19 -0
  222. package/dist/subNanoseconds.d.ts.map +1 -0
  223. package/dist/subNanoseconds.js +9 -0
  224. package/dist/subNanoseconds.js.map +1 -0
  225. package/dist/subNanoseconds.test.d.ts +2 -0
  226. package/dist/subNanoseconds.test.d.ts.map +1 -0
  227. package/dist/subSeconds.d.ts +19 -0
  228. package/dist/subSeconds.d.ts.map +1 -0
  229. package/dist/subSeconds.js +9 -0
  230. package/dist/subSeconds.js.map +1 -0
  231. package/dist/subSeconds.test.d.ts +2 -0
  232. package/dist/subSeconds.test.d.ts.map +1 -0
  233. package/dist/subWeeks.d.ts +20 -0
  234. package/dist/subWeeks.d.ts.map +1 -0
  235. package/dist/subWeeks.js +9 -0
  236. package/dist/subWeeks.js.map +1 -0
  237. package/dist/subWeeks.test.d.ts +2 -0
  238. package/dist/subWeeks.test.d.ts.map +1 -0
  239. package/dist/subYears.d.ts +20 -0
  240. package/dist/subYears.d.ts.map +1 -0
  241. package/dist/subYears.js +9 -0
  242. package/dist/subYears.js.map +1 -0
  243. package/dist/subYears.test.d.ts +2 -0
  244. package/dist/subYears.test.d.ts.map +1 -0
  245. package/dist/toDate.d.ts +27 -0
  246. package/dist/toDate.d.ts.map +1 -0
  247. package/dist/toDate.js +7 -0
  248. package/dist/toDate.js.map +1 -0
  249. package/dist/toDate.test.d.ts +2 -0
  250. package/dist/toDate.test.d.ts.map +1 -0
  251. package/dist/toUtc.d.ts +9 -5
  252. package/dist/toUtc.d.ts.map +1 -1
  253. package/dist/toUtc.js +1 -1
  254. package/dist/toZonedTime.d.ts +8 -4
  255. package/dist/toZonedTime.d.ts.map +1 -1
  256. package/dist/toZonedTime.js +1 -1
  257. package/package.json +1 -1
  258. package/dist/chunk-GPAFAHKJ.js.map +0 -1
  259. package/dist/chunk-KD5GEHUA.js.map +0 -1
  260. /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,26 +18,53 @@ 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
30
48
 
31
49
  ```typescript
32
- import { toZonedTime, toUtcString } from '@gobrand/tiempo';
50
+ import { toZonedTime, toUtcString, toUtc, toDate } from '@gobrand/tiempo';
33
51
 
34
- // Backend sends: "2025-01-20T20:00:00.000Z"
52
+ // From ISO string (typical backend API)
35
53
  const zoned = toZonedTime("2025-01-20T20:00:00.000Z", "America/New_York");
36
54
  console.log(zoned.hour); // 15 (3 PM in New York)
37
55
 
38
- // Send back to backend:
39
- const utc = toUtcString(zoned);
40
- console.log(utc); // "2025-01-20T20:00:00Z"
56
+ // From Date object (e.g., Drizzle ORM)
57
+ const date = new Date("2025-01-20T20:00:00.000Z");
58
+ const zonedFromDate = toZonedTime(date, "America/New_York");
59
+ console.log(zonedFromDate.hour); // 15 (3 PM in New York)
60
+
61
+ // Back to ISO string
62
+ const utcString = toUtcString(zoned);
63
+ console.log(utcString); // "2025-01-20T20:00:00Z"
64
+
65
+ // Back to Date object (for Drizzle ORM)
66
+ const backToDate = toDate(zoned);
67
+ console.log(backToDate.toISOString()); // "2025-01-20T20:00:00.000Z"
41
68
  ```
42
69
 
43
70
  ## API
@@ -46,10 +73,10 @@ console.log(utc); // "2025-01-20T20:00:00Z"
46
73
 
47
74
  #### `toZonedTime(input, timezone)`
48
75
 
49
- Convert a UTC ISO string, Instant, or ZonedDateTime to a ZonedDateTime in the specified timezone.
76
+ Convert a UTC ISO string, Date, Instant, or ZonedDateTime to a ZonedDateTime in the specified timezone.
50
77
 
51
78
  **Parameters:**
52
- - `input` (string | Temporal.Instant | Temporal.ZonedDateTime): A UTC ISO 8601 string, Temporal.Instant, or Temporal.ZonedDateTime
79
+ - `input` (string | Date | Temporal.Instant | Temporal.ZonedDateTime): A UTC ISO 8601 string, Date object, Temporal.Instant, or Temporal.ZonedDateTime
53
80
  - `timezone` (string): An IANA timezone identifier (e.g., `"America/New_York"`, `"Europe/London"`)
54
81
 
55
82
  **Returns:** `Temporal.ZonedDateTime` - The same instant in the specified timezone
@@ -63,9 +90,14 @@ const zoned = toZonedTime("2025-01-20T20:00:00.000Z", "America/New_York");
63
90
  console.log(zoned.hour); // 15 (3 PM in New York)
64
91
  console.log(zoned.toString()); // "2025-01-20T15:00:00-05:00[America/New_York]"
65
92
 
93
+ // From Date (e.g., from Drizzle ORM)
94
+ const date = new Date("2025-01-20T20:00:00.000Z");
95
+ const zoned2 = toZonedTime(date, "America/New_York");
96
+ console.log(zoned2.hour); // 15 (3 PM in New York)
97
+
66
98
  // From Instant
67
99
  const instant = Temporal.Instant.from("2025-01-20T20:00:00Z");
68
- const zoned2 = toZonedTime(instant, "Asia/Tokyo");
100
+ const zoned3 = toZonedTime(instant, "Asia/Tokyo");
69
101
 
70
102
  // From ZonedDateTime (convert to different timezone)
71
103
  const nyTime = Temporal.ZonedDateTime.from("2025-01-20T15:00:00-05:00[America/New_York]");
@@ -74,10 +106,10 @@ const tokyoTime = toZonedTime(nyTime, "Asia/Tokyo");
74
106
 
75
107
  #### `toUtc(input)`
76
108
 
77
- Convert a UTC ISO string or ZonedDateTime to a Temporal.Instant (UTC).
109
+ Convert a UTC ISO string, Date, or ZonedDateTime to a Temporal.Instant (UTC).
78
110
 
79
111
  **Parameters:**
80
- - `input` (string | Temporal.ZonedDateTime): A UTC ISO 8601 string or Temporal.ZonedDateTime
112
+ - `input` (string | Date | Temporal.ZonedDateTime): A UTC ISO 8601 string, Date object, or Temporal.ZonedDateTime
81
113
 
82
114
  **Returns:** `Temporal.Instant` - A Temporal.Instant representing the same moment in UTC
83
115
 
@@ -88,10 +120,14 @@ import { toUtc } from '@gobrand/tiempo';
88
120
  // From ISO string
89
121
  const instant = toUtc("2025-01-20T20:00:00.000Z");
90
122
 
123
+ // From Date (e.g., from Drizzle ORM)
124
+ const date = new Date("2025-01-20T20:00:00.000Z");
125
+ const instant2 = toUtc(date);
126
+
91
127
  // From ZonedDateTime
92
128
  const zoned = Temporal.ZonedDateTime.from("2025-01-20T15:00:00-05:00[America/New_York]");
93
- const instant2 = toUtc(zoned);
94
- // Both represent the same UTC moment: 2025-01-20T20:00:00Z
129
+ const instant3 = toUtc(zoned);
130
+ // All represent the same UTC moment: 2025-01-20T20:00:00Z
95
131
  ```
96
132
 
97
133
  #### `toUtcString(input)`
@@ -118,6 +154,35 @@ const iso2 = toUtcString(instant);
118
154
  console.log(iso2); // "2025-01-20T20:00:00Z"
119
155
  ```
120
156
 
157
+ #### `toDate(input)`
158
+
159
+ Convert a Temporal.Instant or ZonedDateTime to a Date object.
160
+
161
+ **Parameters:**
162
+ - `input` (Temporal.Instant | Temporal.ZonedDateTime): A Temporal.Instant or Temporal.ZonedDateTime
163
+
164
+ **Returns:** `Date` - A Date object representing the same moment in time
165
+
166
+ **Example:**
167
+ ```typescript
168
+ import { toDate } from '@gobrand/tiempo';
169
+
170
+ // From Instant
171
+ const instant = Temporal.Instant.from("2025-01-20T20:00:00Z");
172
+ const date = toDate(instant);
173
+ console.log(date.toISOString()); // "2025-01-20T20:00:00.000Z"
174
+
175
+ // From ZonedDateTime
176
+ const zoned = Temporal.ZonedDateTime.from("2025-01-20T15:00:00-05:00[America/New_York]");
177
+ const date2 = toDate(zoned);
178
+ console.log(date2.toISOString()); // "2025-01-20T20:00:00.000Z"
179
+
180
+ // Use with Drizzle ORM (for storing back to database)
181
+ const instant = Temporal.Instant.from("2025-01-20T20:00:00Z");
182
+ const dateForDb = toDate(instant);
183
+ await db.update(posts).set({ publishedAt: dateForDb });
184
+ ```
185
+
121
186
  ### Formatting
122
187
 
123
188
  #### `intlFormatDistance(laterDate, earlierDate, options?)`
@@ -346,6 +411,138 @@ startOfYear(zoned); // 2025-01-01T00:00:00-05:00[America/New_York]
346
411
  endOfYear(zoned); // 2025-12-31T23:59:59.999999999-05:00[America/New_York]
347
412
  ```
348
413
 
414
+ ### Addition/Subtraction Utilities
415
+
416
+ tiempo provides comprehensive datetime arithmetic functions for all time units, from nanoseconds to years. All functions:
417
+ - Accept `Temporal.Instant` or `Temporal.ZonedDateTime` as input
418
+ - Return `Temporal.ZonedDateTime` preserving the original timezone
419
+ - Properly handle DST transitions, leap years, and month-end edge cases
420
+ - Support negative values for subtraction
421
+
422
+ #### Addition Functions
423
+
424
+ ##### `addYears(input, years)` / `addMonths(input, months)` / `addWeeks(input, weeks)` / `addDays(input, days)`
425
+
426
+ Add calendar units (years, months, weeks, or days) to a datetime.
427
+
428
+ ```typescript
429
+ import { addYears, addMonths, addWeeks, addDays } from '@gobrand/tiempo';
430
+
431
+ const date = Temporal.Instant.from('2025-01-20T12:00:00Z');
432
+
433
+ addYears(date, 2); // 2027-01-20T12:00:00Z[UTC] (2 years later)
434
+ addMonths(date, 3); // 2025-04-20T12:00:00Z[UTC] (3 months later)
435
+ addWeeks(date, 2); // 2025-02-03T12:00:00Z[UTC] (2 weeks later)
436
+ addDays(date, 5); // 2025-01-25T12:00:00Z[UTC] (5 days later)
437
+
438
+ // Handle month-end edge cases automatically
439
+ const endOfJan = Temporal.Instant.from('2025-01-31T12:00:00Z');
440
+ addMonths(endOfJan, 1); // 2025-02-28T12:00:00Z[UTC] (Jan 31 → Feb 28)
441
+
442
+ // Negative values subtract
443
+ addMonths(date, -3); // 2024-10-20T12:00:00Z[UTC] (3 months earlier)
444
+ ```
445
+
446
+ ##### `addHours(input, hours)` / `addMinutes(input, minutes)` / `addSeconds(input, seconds)`
447
+
448
+ Add time units (hours, minutes, or seconds) to a datetime.
449
+
450
+ ```typescript
451
+ import { addHours, addMinutes, addSeconds } from '@gobrand/tiempo';
452
+
453
+ const time = Temporal.Instant.from('2025-01-20T12:00:00Z');
454
+
455
+ addHours(time, 3); // 2025-01-20T15:00:00Z[UTC] (3 hours later)
456
+ addMinutes(time, 30); // 2025-01-20T12:30:00Z[UTC] (30 minutes later)
457
+ addSeconds(time, 45); // 2025-01-20T12:00:45Z[UTC] (45 seconds later)
458
+
459
+ // Works with ZonedDateTime and preserves timezone
460
+ const ny = Temporal.ZonedDateTime.from('2025-01-20T15:00:00-05:00[America/New_York]');
461
+ addHours(ny, 2); // 2025-01-20T17:00:00-05:00[America/New_York]
462
+ ```
463
+
464
+ ##### `addMilliseconds(input, ms)` / `addMicroseconds(input, μs)` / `addNanoseconds(input, ns)`
465
+
466
+ Add sub-second precision units (milliseconds, microseconds, or nanoseconds) to a datetime.
467
+
468
+ ```typescript
469
+ import { addMilliseconds, addMicroseconds, addNanoseconds } from '@gobrand/tiempo';
470
+
471
+ const precise = Temporal.Instant.from('2025-01-20T12:00:00Z');
472
+
473
+ addMilliseconds(precise, 500); // 2025-01-20T12:00:00.500Z[UTC]
474
+ addMicroseconds(precise, 500); // 2025-01-20T12:00:00.000500Z[UTC]
475
+ addNanoseconds(precise, 500); // 2025-01-20T12:00:00.000000500Z[UTC]
476
+ ```
477
+
478
+ #### Subtraction Functions
479
+
480
+ All subtraction functions are convenience wrappers that call their corresponding addition functions with negated values.
481
+
482
+ ##### `subYears(input, years)` / `subMonths(input, months)` / `subWeeks(input, weeks)` / `subDays(input, days)`
483
+
484
+ ```typescript
485
+ import { subYears, subMonths, subWeeks, subDays } from '@gobrand/tiempo';
486
+
487
+ const date = Temporal.Instant.from('2025-01-20T12:00:00Z');
488
+
489
+ subYears(date, 2); // 2023-01-20T12:00:00Z[UTC] (2 years earlier)
490
+ subMonths(date, 3); // 2024-10-20T12:00:00Z[UTC] (3 months earlier)
491
+ subWeeks(date, 2); // 2025-01-06T12:00:00Z[UTC] (2 weeks earlier)
492
+ subDays(date, 5); // 2025-01-15T12:00:00Z[UTC] (5 days earlier)
493
+ ```
494
+
495
+ ##### `subHours(input, hours)` / `subMinutes(input, minutes)` / `subSeconds(input, seconds)`
496
+
497
+ ```typescript
498
+ import { subHours, subMinutes, subSeconds } from '@gobrand/tiempo';
499
+
500
+ const time = Temporal.Instant.from('2025-01-20T12:00:00Z');
501
+
502
+ subHours(time, 3); // 2025-01-20T09:00:00Z[UTC] (3 hours earlier)
503
+ subMinutes(time, 30); // 2025-01-20T11:30:00Z[UTC] (30 minutes earlier)
504
+ subSeconds(time, 45); // 2025-01-20T11:59:15Z[UTC] (45 seconds earlier)
505
+ ```
506
+
507
+ ##### `subMilliseconds(input, ms)` / `subMicroseconds(input, μs)` / `subNanoseconds(input, ns)`
508
+
509
+ ```typescript
510
+ import { subMilliseconds, subMicroseconds, subNanoseconds } from '@gobrand/tiempo';
511
+
512
+ const precise = Temporal.Instant.from('2025-01-20T12:00:00.500Z');
513
+
514
+ subMilliseconds(precise, 250); // 2025-01-20T12:00:00.250Z[UTC]
515
+ subMicroseconds(precise, 250); // 2025-01-20T12:00:00.499750Z[UTC]
516
+ subNanoseconds(precise, 250); // 2025-01-20T12:00:00.499999750Z[UTC]
517
+ ```
518
+
519
+ #### Real-world Example: Meeting Scheduler
520
+
521
+ ```typescript
522
+ import {
523
+ toZonedTime,
524
+ addDays,
525
+ addMinutes,
526
+ format
527
+ } from '@gobrand/tiempo';
528
+
529
+ // User's current meeting time
530
+ const meeting = toZonedTime('2025-01-20T15:00:00Z', 'America/New_York');
531
+ // 2025-01-20T10:00:00-05:00[America/New_York] (10 AM in NY)
532
+
533
+ // Reschedule to tomorrow, same time
534
+ const tomorrow = addDays(meeting, 1);
535
+ format(tomorrow, 'EEEE, MMMM do'); // "Tuesday, January 21st"
536
+
537
+ // Add 30-minute buffer before the meeting
538
+ const arriveBy = subMinutes(tomorrow, 30);
539
+ format(arriveBy, 'h:mm a'); // "9:30 AM"
540
+
541
+ // Schedule follow-up 2 weeks later
542
+ const followUp = addWeeks(tomorrow, 2);
543
+ format(followUp, 'MMM d'); // "Feb 4"
544
+ ```
545
+
349
546
  ### Comparison Utilities
350
547
 
351
548
  #### `isBefore(date1, date2)` / `isAfter(date1, date2)`
@@ -550,12 +747,51 @@ const instant2 = Temporal.Instant.from('2025-01-20T23:00:00Z');
550
747
  isSameDay(instant1, instant2); // true (both Jan 20 in UTC)
551
748
  ```
552
749
 
553
- ## Real World Example
750
+ ## Drizzle ORM Integration
751
+
752
+ tiempo seamlessly integrates with Drizzle ORM for database datetime operations. When using Drizzle with PostgreSQL `timestamptz` columns and `mode: 'date'`, tiempo provides utilities to convert between Date objects and Temporal.
753
+
754
+ ```typescript
755
+ import { toZonedTime, toUtc, toDate } from '@gobrand/tiempo';
756
+
757
+ // 1. Reading from database (Drizzle returns Date with mode: 'date')
758
+ const post = await db.query.posts.findFirst();
759
+ const publishedAt = post.publishedAt; // Date object
760
+
761
+ // 2. Convert to user's timezone for display
762
+ const userTimezone = "America/New_York";
763
+ const zonedTime = toZonedTime(publishedAt, userTimezone);
764
+ console.log(zonedTime.hour); // Local hour in user's timezone
765
+
766
+ // 3. User reschedules post to tomorrow at 3 PM their time
767
+ const rescheduled = zonedTime.add({ days: 1 }).with({ hour: 15, minute: 0 });
768
+
769
+ // 4. Convert back to Date for database storage
770
+ const dateForDb = toDate(rescheduled);
771
+ await db.update(posts).set({ publishedAt: dateForDb }).where(eq(posts.id, post.id));
772
+ ```
773
+
774
+ **Why this works:**
775
+ - Drizzle's `mode: 'date'` returns JavaScript `Date` objects (timestamps)
776
+ - `toZonedTime(date, tz)` converts the Date to a timezone-aware Temporal object
777
+ - Work with Temporal's powerful API for date arithmetic and manipulation
778
+ - `toDate(temporal)` converts back to Date for Drizzle storage
779
+
780
+ ## Real World Examples
554
781
 
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.
782
+ ### Example 1: Social Media Post Scheduler
783
+
784
+ 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
785
 
557
786
  ```typescript
558
- import { toZonedTime, toUtcString, format } from '@gobrand/tiempo';
787
+ import {
788
+ toZonedTime,
789
+ toUtcString,
790
+ format,
791
+ addDays,
792
+ addHours,
793
+ subMinutes
794
+ } from '@gobrand/tiempo';
559
795
 
560
796
  // 1. Receive UTC ISO 8601 string from backend
561
797
  const scheduledAtUTC = "2025-01-20T20:00:00.000Z";
@@ -568,16 +804,53 @@ const zonedDateTime = toZonedTime(scheduledAtUTC, userTimezone);
568
804
  const displayTime = format(zonedDateTime, "EEEE, MMMM do 'at' h:mm a");
569
805
  console.log(displayTime); // "Monday, January 20th at 3:00 PM"
570
806
 
571
- // 4. User reschedules to 4:00 PM their time
572
- const updatedZoned = zonedDateTime.with({ hour: 16 });
807
+ // 4. User wants to reschedule to tomorrow, 2 hours later
808
+ const tomorrow = addDays(zonedDateTime, 1);
809
+ const twoHoursLater = addHours(tomorrow, 2);
573
810
 
574
811
  // 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"
812
+ const confirmTime = format(twoHoursLater, "EEEE 'at' h:mm a");
813
+ console.log(`Rescheduled to ${confirmTime}`); // "Tuesday at 5:00 PM"
577
814
 
578
815
  // 6. Convert back to UTC ISO 8601 string for backend
579
- const updatedUTC = toUtcString(updatedZoned);
580
- console.log(updatedUTC); // "2025-01-20T21:00:00Z"
816
+ const updatedUTC = toUtcString(twoHoursLater);
817
+ console.log(updatedUTC); // "2025-01-21T22:00:00Z"
818
+ ```
819
+
820
+ ### Example 2: Meeting Reminder System
821
+
822
+ ```typescript
823
+ import {
824
+ toZonedTime,
825
+ format,
826
+ subMinutes,
827
+ subHours,
828
+ differenceInMinutes,
829
+ isFuture
830
+ } from '@gobrand/tiempo';
831
+
832
+ // Meeting scheduled for 2 PM
833
+ const meeting = toZonedTime('2025-01-20T19:00:00Z', 'America/New_York');
834
+ // 2025-01-20T14:00:00-05:00[America/New_York]
835
+
836
+ // Send reminders at multiple intervals
837
+ const reminders = [
838
+ { time: subMinutes(meeting, 15), label: '15 minutes before' },
839
+ { time: subHours(meeting, 1), label: '1 hour before' },
840
+ { time: subHours(meeting, 24), label: '1 day before' },
841
+ ];
842
+
843
+ reminders.forEach(({ time, label }) => {
844
+ if (isFuture(time)) {
845
+ const formatted = format(time, 'MMM d, h:mm a');
846
+ console.log(`Send reminder "${label}" at ${formatted}`);
847
+ }
848
+ });
849
+
850
+ // Calculate time until meeting
851
+ const now = Temporal.Now.zonedDateTimeISO('America/New_York');
852
+ const minutesUntil = differenceInMinutes(meeting, now);
853
+ console.log(`Meeting starts in ${minutesUntil} minutes`);
581
854
  ```
582
855
 
583
856
  ## 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":""}