@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.
- package/README.md +297 -24
- package/dist/addDays.d.ts +37 -0
- package/dist/addDays.d.ts.map +1 -0
- package/dist/addDays.js +8 -0
- package/dist/addDays.js.map +1 -0
- package/dist/addDays.test.d.ts +2 -0
- package/dist/addDays.test.d.ts.map +1 -0
- package/dist/addHours.d.ts +37 -0
- package/dist/addHours.d.ts.map +1 -0
- package/dist/addHours.js +8 -0
- package/dist/addHours.js.map +1 -0
- package/dist/addHours.test.d.ts +2 -0
- package/dist/addHours.test.d.ts.map +1 -0
- package/dist/addMicroseconds.d.ts +36 -0
- package/dist/addMicroseconds.d.ts.map +1 -0
- package/dist/addMicroseconds.js +8 -0
- package/dist/addMicroseconds.js.map +1 -0
- package/dist/addMicroseconds.test.d.ts +2 -0
- package/dist/addMicroseconds.test.d.ts.map +1 -0
- package/dist/addMilliseconds.d.ts +36 -0
- package/dist/addMilliseconds.d.ts.map +1 -0
- package/dist/addMilliseconds.js +8 -0
- package/dist/addMilliseconds.js.map +1 -0
- package/dist/addMilliseconds.test.d.ts +2 -0
- package/dist/addMilliseconds.test.d.ts.map +1 -0
- package/dist/addMinutes.d.ts +36 -0
- package/dist/addMinutes.d.ts.map +1 -0
- package/dist/addMinutes.js +8 -0
- package/dist/addMinutes.js.map +1 -0
- package/dist/addMinutes.test.d.ts +2 -0
- package/dist/addMinutes.test.d.ts.map +1 -0
- package/dist/addMonths.d.ts +37 -0
- package/dist/addMonths.d.ts.map +1 -0
- package/dist/addMonths.js +8 -0
- package/dist/addMonths.js.map +1 -0
- package/dist/addMonths.test.d.ts +2 -0
- package/dist/addMonths.test.d.ts.map +1 -0
- package/dist/addNanoseconds.d.ts +36 -0
- package/dist/addNanoseconds.d.ts.map +1 -0
- package/dist/addNanoseconds.js +8 -0
- package/dist/addNanoseconds.js.map +1 -0
- package/dist/addNanoseconds.test.d.ts +2 -0
- package/dist/addNanoseconds.test.d.ts.map +1 -0
- package/dist/addSeconds.d.ts +36 -0
- package/dist/addSeconds.d.ts.map +1 -0
- package/dist/addSeconds.js +8 -0
- package/dist/addSeconds.js.map +1 -0
- package/dist/addSeconds.test.d.ts +2 -0
- package/dist/addSeconds.test.d.ts.map +1 -0
- package/dist/addWeeks.d.ts +37 -0
- package/dist/addWeeks.d.ts.map +1 -0
- package/dist/addWeeks.js +8 -0
- package/dist/addWeeks.js.map +1 -0
- package/dist/addWeeks.test.d.ts +2 -0
- package/dist/addWeeks.test.d.ts.map +1 -0
- package/dist/addYears.d.ts +37 -0
- package/dist/addYears.d.ts.map +1 -0
- package/dist/addYears.js +8 -0
- package/dist/addYears.js.map +1 -0
- package/dist/addYears.test.d.ts +2 -0
- package/dist/addYears.test.d.ts.map +1 -0
- package/dist/{chunk-KD5GEHUA.js → chunk-2MP3ESL7.js} +4 -1
- package/dist/chunk-2MP3ESL7.js.map +1 -0
- package/dist/chunk-2XHAHSB6.js +14 -0
- package/dist/chunk-2XHAHSB6.js.map +1 -0
- package/dist/chunk-4NJMCCUM.js +14 -0
- package/dist/chunk-4NJMCCUM.js.map +1 -0
- package/dist/chunk-52NEOY34.js +13 -0
- package/dist/chunk-52NEOY34.js.map +1 -0
- package/dist/chunk-7ATM7AXL.js +14 -0
- package/dist/chunk-7ATM7AXL.js.map +1 -0
- package/dist/chunk-A5VVBYNT.js +14 -0
- package/dist/chunk-A5VVBYNT.js.map +1 -0
- package/dist/chunk-ADQTZVMH.js +15 -0
- package/dist/chunk-ADQTZVMH.js.map +1 -0
- package/dist/chunk-AHMKY474.js +13 -0
- package/dist/chunk-AHMKY474.js.map +1 -0
- package/dist/chunk-BH2YB4MV.js +13 -0
- package/dist/chunk-BH2YB4MV.js.map +1 -0
- package/dist/chunk-BQBLSXK2.js +13 -0
- package/dist/chunk-BQBLSXK2.js.map +1 -0
- package/dist/{chunk-GPAFAHKJ.js → chunk-BW5SFCKS.js} +4 -1
- package/dist/chunk-BW5SFCKS.js.map +1 -0
- package/dist/chunk-CY746ZUQ.js +15 -0
- package/dist/chunk-CY746ZUQ.js.map +1 -0
- package/dist/chunk-DT2EWLHU.js +14 -0
- package/dist/chunk-DT2EWLHU.js.map +1 -0
- package/dist/chunk-EEQ3REET.js +15 -0
- package/dist/chunk-EEQ3REET.js.map +1 -0
- package/dist/chunk-EYO2ZJLH.js +14 -0
- package/dist/chunk-EYO2ZJLH.js.map +1 -0
- package/dist/chunk-HDBH7RTY.js +13 -0
- package/dist/chunk-HDBH7RTY.js.map +1 -0
- package/dist/chunk-ISHZRFVN.js +15 -0
- package/dist/chunk-ISHZRFVN.js.map +1 -0
- package/dist/chunk-J6G2I2TU.js +13 -0
- package/dist/chunk-J6G2I2TU.js.map +1 -0
- package/dist/chunk-JOD4ATPE.js +15 -0
- package/dist/chunk-JOD4ATPE.js.map +1 -0
- package/dist/chunk-L4SVABDH.js +14 -0
- package/dist/chunk-L4SVABDH.js.map +1 -0
- package/dist/chunk-LDO6PRNJ.js +15 -0
- package/dist/chunk-LDO6PRNJ.js.map +1 -0
- package/dist/chunk-NRD5HRZV.js +14 -0
- package/dist/chunk-NRD5HRZV.js.map +1 -0
- package/dist/chunk-PPB62JYV.js +15 -0
- package/dist/chunk-PPB62JYV.js.map +1 -0
- package/dist/chunk-Q2F3HEXB.js +14 -0
- package/dist/chunk-Q2F3HEXB.js.map +1 -0
- package/dist/chunk-S63QUP4W.js +15 -0
- package/dist/chunk-S63QUP4W.js.map +1 -0
- package/dist/chunk-TGKWBQ7L.js +13 -0
- package/dist/chunk-TGKWBQ7L.js.map +1 -0
- package/dist/chunk-U4RNUZXO.js +13 -0
- package/dist/chunk-U4RNUZXO.js.map +1 -0
- package/dist/chunk-V27NUBXQ.js +14 -0
- package/dist/chunk-V27NUBXQ.js.map +1 -0
- package/dist/chunk-VLZ3HQQA.js +15 -0
- package/dist/chunk-VLZ3HQQA.js.map +1 -0
- package/dist/chunk-WVHAYLBW.js +13 -0
- package/dist/chunk-WVHAYLBW.js.map +1 -0
- package/dist/{chunk-NL5LWPJI.js → chunk-XEDXPI5G.js} +4 -4
- package/dist/chunk-XW5MLXX5.js +13 -0
- package/dist/chunk-XW5MLXX5.js.map +1 -0
- package/dist/chunk-YKBP3G7L.js +13 -0
- package/dist/chunk-YKBP3G7L.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +139 -19
- package/dist/intlFormatDistance.js +2 -2
- package/dist/isSameHour.d.ts +58 -0
- package/dist/isSameHour.d.ts.map +1 -0
- package/dist/isSameHour.js +8 -0
- package/dist/isSameHour.js.map +1 -0
- package/dist/isSameHour.test.d.ts +2 -0
- package/dist/isSameHour.test.d.ts.map +1 -0
- package/dist/isSameMicrosecond.d.ts +59 -0
- package/dist/isSameMicrosecond.d.ts.map +1 -0
- package/dist/isSameMicrosecond.js +8 -0
- package/dist/isSameMicrosecond.js.map +1 -0
- package/dist/isSameMicrosecond.test.d.ts +2 -0
- package/dist/isSameMicrosecond.test.d.ts.map +1 -0
- package/dist/isSameMillisecond.d.ts +59 -0
- package/dist/isSameMillisecond.d.ts.map +1 -0
- package/dist/isSameMillisecond.js +8 -0
- package/dist/isSameMillisecond.js.map +1 -0
- package/dist/isSameMillisecond.test.d.ts +2 -0
- package/dist/isSameMillisecond.test.d.ts.map +1 -0
- package/dist/isSameMinute.d.ts +58 -0
- package/dist/isSameMinute.d.ts.map +1 -0
- package/dist/isSameMinute.js +8 -0
- package/dist/isSameMinute.js.map +1 -0
- package/dist/isSameMinute.test.d.ts +2 -0
- package/dist/isSameMinute.test.d.ts.map +1 -0
- package/dist/isSameMonth.d.ts +58 -0
- package/dist/isSameMonth.d.ts.map +1 -0
- package/dist/isSameMonth.js +8 -0
- package/dist/isSameMonth.js.map +1 -0
- package/dist/isSameMonth.test.d.ts +2 -0
- package/dist/isSameMonth.test.d.ts.map +1 -0
- package/dist/isSameNanosecond.d.ts +59 -0
- package/dist/isSameNanosecond.d.ts.map +1 -0
- package/dist/isSameNanosecond.js +8 -0
- package/dist/isSameNanosecond.js.map +1 -0
- package/dist/isSameNanosecond.test.d.ts +2 -0
- package/dist/isSameNanosecond.test.d.ts.map +1 -0
- package/dist/isSameSecond.d.ts +59 -0
- package/dist/isSameSecond.d.ts.map +1 -0
- package/dist/isSameSecond.js +8 -0
- package/dist/isSameSecond.js.map +1 -0
- package/dist/isSameSecond.test.d.ts +2 -0
- package/dist/isSameSecond.test.d.ts.map +1 -0
- package/dist/isSameWeek.d.ts +72 -0
- package/dist/isSameWeek.d.ts.map +1 -0
- package/dist/isSameWeek.js +8 -0
- package/dist/isSameWeek.js.map +1 -0
- package/dist/isSameWeek.test.d.ts +2 -0
- package/dist/isSameWeek.test.d.ts.map +1 -0
- package/dist/isSameYear.d.ts +58 -0
- package/dist/isSameYear.d.ts.map +1 -0
- package/dist/isSameYear.js +8 -0
- package/dist/isSameYear.js.map +1 -0
- package/dist/isSameYear.test.d.ts +2 -0
- package/dist/isSameYear.test.d.ts.map +1 -0
- package/dist/subDays.d.ts +20 -0
- package/dist/subDays.d.ts.map +1 -0
- package/dist/subDays.js +9 -0
- package/dist/subDays.js.map +1 -0
- package/dist/subDays.test.d.ts +2 -0
- package/dist/subDays.test.d.ts.map +1 -0
- package/dist/subHours.d.ts +20 -0
- package/dist/subHours.d.ts.map +1 -0
- package/dist/subHours.js +9 -0
- package/dist/subHours.js.map +1 -0
- package/dist/subHours.test.d.ts +2 -0
- package/dist/subHours.test.d.ts.map +1 -0
- package/dist/subMicroseconds.d.ts +19 -0
- package/dist/subMicroseconds.d.ts.map +1 -0
- package/dist/subMicroseconds.js +9 -0
- package/dist/subMicroseconds.js.map +1 -0
- package/dist/subMicroseconds.test.d.ts +2 -0
- package/dist/subMicroseconds.test.d.ts.map +1 -0
- package/dist/subMilliseconds.d.ts +19 -0
- package/dist/subMilliseconds.d.ts.map +1 -0
- package/dist/subMilliseconds.js +9 -0
- package/dist/subMilliseconds.js.map +1 -0
- package/dist/subMilliseconds.test.d.ts +2 -0
- package/dist/subMilliseconds.test.d.ts.map +1 -0
- package/dist/subMinutes.d.ts +19 -0
- package/dist/subMinutes.d.ts.map +1 -0
- package/dist/subMinutes.js +9 -0
- package/dist/subMinutes.js.map +1 -0
- package/dist/subMinutes.test.d.ts +2 -0
- package/dist/subMinutes.test.d.ts.map +1 -0
- package/dist/subMonths.d.ts +20 -0
- package/dist/subMonths.d.ts.map +1 -0
- package/dist/subMonths.js +9 -0
- package/dist/subMonths.js.map +1 -0
- package/dist/subMonths.test.d.ts +2 -0
- package/dist/subMonths.test.d.ts.map +1 -0
- package/dist/subNanoseconds.d.ts +19 -0
- package/dist/subNanoseconds.d.ts.map +1 -0
- package/dist/subNanoseconds.js +9 -0
- package/dist/subNanoseconds.js.map +1 -0
- package/dist/subNanoseconds.test.d.ts +2 -0
- package/dist/subNanoseconds.test.d.ts.map +1 -0
- package/dist/subSeconds.d.ts +19 -0
- package/dist/subSeconds.d.ts.map +1 -0
- package/dist/subSeconds.js +9 -0
- package/dist/subSeconds.js.map +1 -0
- package/dist/subSeconds.test.d.ts +2 -0
- package/dist/subSeconds.test.d.ts.map +1 -0
- package/dist/subWeeks.d.ts +20 -0
- package/dist/subWeeks.d.ts.map +1 -0
- package/dist/subWeeks.js +9 -0
- package/dist/subWeeks.js.map +1 -0
- package/dist/subWeeks.test.d.ts +2 -0
- package/dist/subWeeks.test.d.ts.map +1 -0
- package/dist/subYears.d.ts +20 -0
- package/dist/subYears.d.ts.map +1 -0
- package/dist/subYears.js +9 -0
- package/dist/subYears.js.map +1 -0
- package/dist/subYears.test.d.ts +2 -0
- package/dist/subYears.test.d.ts.map +1 -0
- package/dist/toDate.d.ts +27 -0
- package/dist/toDate.d.ts.map +1 -0
- package/dist/toDate.js +7 -0
- package/dist/toDate.js.map +1 -0
- package/dist/toDate.test.d.ts +2 -0
- package/dist/toDate.test.d.ts.map +1 -0
- package/dist/toUtc.d.ts +9 -5
- package/dist/toUtc.d.ts.map +1 -1
- package/dist/toUtc.js +1 -1
- package/dist/toZonedTime.d.ts +8 -4
- package/dist/toZonedTime.d.ts.map +1 -1
- package/dist/toZonedTime.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-GPAFAHKJ.js.map +0 -1
- package/dist/chunk-KD5GEHUA.js.map +0 -1
- /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
|
[](https://www.npmjs.com/package/@gobrand/tiempo)
|
|
4
4
|
[](https://github.com/go-brand/tiempo/actions/workflows/ci.yml)
|
|
5
5
|
[](https://opensource.org/licenses/MIT)
|
|
6
6
|
|
|
7
|
-
|
|
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.
|
|
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
|
-
//
|
|
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
|
-
//
|
|
39
|
-
const
|
|
40
|
-
|
|
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
|
|
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
|
|
94
|
-
//
|
|
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
|
-
##
|
|
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
|
-
|
|
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 {
|
|
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
|
|
572
|
-
const
|
|
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(
|
|
576
|
-
console.log(`Rescheduled to ${confirmTime}`); // "
|
|
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(
|
|
580
|
-
console.log(updatedUTC); // "2025-01-
|
|
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"}
|
package/dist/addDays.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -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"}
|
package/dist/addHours.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addMilliseconds.test.d.ts","sourceRoot":"","sources":["../src/addMilliseconds.test.ts"],"names":[],"mappings":""}
|