Skip to content

Commit 2b9bc16

Browse files
committed
Add comprehensive API documentation
- Add detailed API reference with examples for all core functions - Include format(), parse(), subtract(), and other function docs - Add FormatterOptions and ParserOptions documentation - Include format tokens reference and usage examples
1 parent becc926 commit 2b9bc16

17 files changed

Lines changed: 3249 additions & 0 deletions

docs/api/addDays.md

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
# addDays()
2+
3+
Adds or subtracts days from a Date object. Handles month boundaries, leap years, and daylight saving time transitions properly.
4+
5+
## Syntax
6+
7+
```typescript
8+
addDays(dateObj, days[, timeZone])
9+
```
10+
11+
### Parameters
12+
13+
| Parameter | Type | Required | Description |
14+
|-----------|------|----------|-------------|
15+
| `dateObj` | `Date` | Yes | The base Date object |
16+
| `days` | `number` | Yes | Number of days to add (positive) or subtract (negative) |
17+
| `timeZone` | `TimeZone \| 'UTC'` | No | Timezone for the calculation |
18+
19+
### Returns
20+
21+
`Date` - A new Date object with the specified number of days added or subtracted
22+
23+
## Basic Examples
24+
25+
### Adding and Subtracting Days
26+
27+
```typescript
28+
import { addDays } from 'date-and-time';
29+
30+
const date = new Date(2024, 7, 15); // August 15, 2024
31+
32+
// Add days
33+
const future = addDays(date, 10);
34+
console.log(future); // August 25, 2024
35+
36+
// Subtract days
37+
const past = addDays(date, -5);
38+
console.log(past); // August 10, 2024
39+
```
40+
41+
### Daylight Saving Time Aware Calculations
42+
43+
```typescript
44+
import { addDays } from 'date-and-time';
45+
import New_York from 'date-and-time/timezones/America/New_York';
46+
47+
// Working with specific timezones
48+
const nyDate = new Date('2024-03-10T05:00:00Z'); // March 10, 2024 05:00 UTC (DST transition day)
49+
50+
// Add 30 days in New York timezone
51+
const futureNY = addDays(nyDate, 30, New_York);
52+
console.log(futureNY); // April 9, 2024 04:00 UTC (EDT, DST adjusted)
53+
54+
// UTC calculation for comparison
55+
const futureUTC = addDays(nyDate, 30, 'UTC');
56+
console.log(futureUTC); // April 9, 2024 05:00 UTC (same time, no DST adjustment)
57+
```
58+
59+
## Use Cases
60+
61+
### Work Day Calculations
62+
63+
```typescript
64+
function addBusinessDays(date: Date, businessDays: number): Date {
65+
let result = new Date(date);
66+
let daysToAdd = businessDays;
67+
68+
while (daysToAdd > 0) {
69+
result = addDays(result, 1);
70+
const dayOfWeek = result.getDay();
71+
72+
// Skip weekends (0 = Sunday, 6 = Saturday)
73+
if (dayOfWeek !== 0 && dayOfWeek !== 6) {
74+
daysToAdd--;
75+
}
76+
}
77+
78+
return result;
79+
}
80+
81+
const friday = new Date(2024, 7, 23); // August 23, 2024 (Friday)
82+
const nextBusinessDay = addBusinessDays(friday, 1);
83+
console.log(nextBusinessDay); // August 26, 2024 (Monday)
84+
```
85+
86+
### Date Range Generation
87+
88+
```typescript
89+
function generateDateRange(startDate: Date, endDate: Date): Date[] {
90+
const dates: Date[] = [];
91+
let currentDate = new Date(startDate);
92+
93+
while (currentDate <= endDate) {
94+
dates.push(new Date(currentDate));
95+
currentDate = addDays(currentDate, 1);
96+
}
97+
98+
return dates;
99+
}
100+
101+
const start = new Date(2024, 7, 28); // August 28, 2024
102+
const end = new Date(2024, 8, 3); // September 3, 2024
103+
const dateRange = generateDateRange(start, end);
104+
console.log(dateRange);
105+
// [Aug 28, Aug 29, Aug 30, Aug 31, Sep 1, Sep 2, Sep 3]
106+
```
107+
108+
## Immutability
109+
110+
`addDays()` does not modify the original Date object:
111+
112+
```typescript
113+
const originalDate = new Date(2024, 7, 15);
114+
const modifiedDate = addDays(originalDate, 10);
115+
116+
console.log(originalDate); // August 15, 2024 (unchanged)
117+
console.log(modifiedDate); // August 25, 2024 (new object)
118+
```
119+
120+
## See Also
121+
122+
- [`addYears()`](./addYears) - Add/subtract years
123+
- [`addMonths()`](./addMonths) - Add/subtract months
124+
- [`addHours()`](./addHours) - Add/subtract hours
125+
- [`addMinutes()`](./addMinutes) - Add/subtract minutes
126+
- [`addSeconds()`](./addSeconds) - Add/subtract seconds
127+
- [`addMilliseconds()`](./addMilliseconds) - Add/subtract milliseconds
128+
- [`subtract()`](./subtract) - Calculate differences with Duration objects

docs/api/addHours.md

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
# addHours()
2+
3+
Adds or subtracts hours from a Date object.
4+
5+
## Syntax
6+
7+
```typescript
8+
addHours(dateObj, hours)
9+
```
10+
11+
### Parameters
12+
13+
| Parameter | Type | Required | Description |
14+
|-----------|------|----------|-------------|
15+
| `dateObj` | `Date` | Yes | The base Date object |
16+
| `hours` | `number` | Yes | Number of hours to add (positive) or subtract (negative) |
17+
18+
### Returns
19+
20+
`Date` - A new Date object with the specified number of hours added or subtracted
21+
22+
## Basic Examples
23+
24+
### Adding and Subtracting Hours
25+
26+
```typescript
27+
import { addHours } from 'date-and-time';
28+
29+
const date = new Date(2024, 7, 15, 14, 30, 45); // August 15, 2024 14:30:45
30+
31+
// Add hours
32+
const future = addHours(date, 6);
33+
console.log(future); // August 15, 2024 20:30:45
34+
35+
// Subtract hours
36+
const past = addHours(date, -3);
37+
console.log(past); // August 15, 2024 11:30:45
38+
```
39+
40+
## Use Cases
41+
42+
### Work Hours Calculation
43+
44+
```typescript
45+
function addWorkingHours(startDate: Date, workHours: number): Date {
46+
// Assuming 8-hour work days, 5 days a week
47+
const hoursPerDay = 8;
48+
const result = new Date(startDate);
49+
let remainingHours = workHours;
50+
51+
while (remainingHours > 0) {
52+
const dayOfWeek = result.getDay();
53+
54+
// Skip weekends
55+
if (dayOfWeek === 0 || dayOfWeek === 6) {
56+
result.setDate(result.getDate() + 1);
57+
continue;
58+
}
59+
60+
const hoursToAdd = Math.min(remainingHours, hoursPerDay);
61+
const newTime = addHours(result, hoursToAdd);
62+
result.setTime(newTime.getTime());
63+
remainingHours -= hoursToAdd;
64+
65+
if (remainingHours > 0) {
66+
// Move to next day, reset to start of work day
67+
result.setDate(result.getDate() + 1);
68+
result.setHours(9, 0, 0, 0); // 9 AM start
69+
}
70+
}
71+
72+
return result;
73+
}
74+
75+
const projectStart = new Date(2024, 7, 15, 9, 0); // August 15, 2024 09:00
76+
const completion = addWorkingHours(projectStart, 24); // 24 working hours
77+
console.log(completion);
78+
```
79+
80+
### Shift Scheduling
81+
82+
```typescript
83+
function generateShiftSchedule(startDate: Date, shiftHours: number, numberOfShifts: number): Date[] {
84+
const shifts: Date[] = [];
85+
let currentStart = new Date(startDate);
86+
87+
for (let i = 0; i < numberOfShifts; i++) {
88+
shifts.push(new Date(currentStart));
89+
currentStart = addHours(currentStart, shiftHours);
90+
}
91+
92+
return shifts;
93+
}
94+
95+
const firstShift = new Date(2024, 7, 15, 6, 0); // August 15, 2024 06:00
96+
const schedule = generateShiftSchedule(firstShift, 8, 5); // 5 shifts of 8 hours each
97+
console.log(schedule);
98+
// [
99+
// August 15, 2024 06:00, // Shift 1
100+
// August 15, 2024 14:00, // Shift 2
101+
// August 15, 2024 22:00, // Shift 3
102+
// August 16, 2024 06:00, // Shift 4
103+
// August 16, 2024 14:00 // Shift 5
104+
// ]
105+
```
106+
107+
## Immutability
108+
109+
`addHours()` does not modify the original Date object:
110+
111+
```typescript
112+
const originalDate = new Date(2024, 7, 15, 14, 30);
113+
const modifiedDate = addHours(originalDate, 5);
114+
115+
console.log(originalDate); // August 15, 2024 14:30:00 (unchanged)
116+
console.log(modifiedDate); // August 15, 2024 19:30:00 (new object)
117+
```
118+
119+
## See Also
120+
121+
- [`addYears()`](./addYears) - Add/subtract years
122+
- [`addMonths()`](./addMonths) - Add/subtract months
123+
- [`addDays()`](./addDays) - Add/subtract days
124+
- [`addMinutes()`](./addMinutes) - Add/subtract minutes
125+
- [`addSeconds()`](./addSeconds) - Add/subtract seconds
126+
- [`addMilliseconds()`](./addMilliseconds) - Add/subtract milliseconds
127+
- [`subtract()`](./subtract) - Calculate differences with Duration objects

docs/api/addMilliseconds.md

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
# addMilliseconds()
2+
3+
Adds or subtracts milliseconds from a Date object.
4+
5+
## Syntax
6+
7+
```typescript
8+
addMilliseconds(dateObj, milliseconds)
9+
```
10+
11+
### Parameters
12+
13+
| Parameter | Type | Required | Description |
14+
|-----------|------|----------|-------------|
15+
| `dateObj` | `Date` | Yes | The base Date object |
16+
| `milliseconds` | `number` | Yes | Number of milliseconds to add (positive) or subtract (negative) |
17+
18+
### Returns
19+
20+
`Date` - A new Date object with the specified number of milliseconds added or subtracted
21+
22+
## Basic Examples
23+
24+
### Adding and Subtracting Milliseconds
25+
26+
```typescript
27+
import { addMilliseconds } from 'date-and-time';
28+
29+
const date = new Date(2024, 7, 15, 14, 30, 45, 123); // August 15, 2024 14:30:45.123
30+
31+
// Add milliseconds
32+
const future = addMilliseconds(date, 500);
33+
console.log(future); // August 15, 2024 14:30:45.623
34+
35+
// Subtract milliseconds
36+
const past = addMilliseconds(date, -200);
37+
console.log(past); // August 15, 2024 14:30:44.923
38+
```
39+
40+
## Use Cases
41+
42+
### High-Precision Timing
43+
44+
```typescript
45+
class PrecisionTimer {
46+
private startTime: Date
47+
48+
start(): void {
49+
this.startTime = new Date();
50+
}
51+
52+
elapsedMs(): number {
53+
if (!this.startTime) {
54+
return 0;
55+
}
56+
return Date.now() - this.startTime.getTime();
57+
}
58+
59+
addPreciseDelay(baseTime: Date, delayMs: number): Date {
60+
return addMilliseconds(baseTime, delayMs);
61+
}
62+
63+
scheduleNextExecution(intervalMs: number): Date {
64+
return addMilliseconds(new Date(), intervalMs);
65+
}
66+
}
67+
68+
const timer = new PrecisionTimer();
69+
70+
timer.start();
71+
// ... perform operations ...
72+
console.log(`Operation took: ${timer.elapsedMs()}ms`);
73+
74+
const nextRun = timer.scheduleNextExecution(150); // Schedule 150ms from now
75+
console.log(`Next execution at: ${nextRun.toISOString()}`);
76+
```
77+
78+
### Animation Frame Scheduling
79+
80+
```typescript
81+
function createAnimationSchedule(startTime: Date, frameRate: number, duration: number) {
82+
const frameInterval = 1000 / frameRate; // ms per frame
83+
const totalFrames = Math.floor((duration * 1000) / frameInterval);
84+
const schedule: { frame: number, time: Date }[] = [];
85+
86+
for (let frame = 0; frame < totalFrames; frame++) {
87+
const frameTime = addMilliseconds(startTime, frame * frameInterval);
88+
schedule.push({ frame, time: frameTime });
89+
}
90+
91+
return schedule;
92+
}
93+
94+
const animationStart = new Date(); // Animation starts now
95+
const frames = createAnimationSchedule(animationStart, 60, 2); // 60 FPS for 2 seconds
96+
97+
console.log(`Animation has ${frames.length} frames`);
98+
console.log('First 5 frames:');
99+
frames.slice(0, 5).forEach(f => {
100+
console.log(`Frame ${f.frame}: ${f.time.toISOString()}`);
101+
});
102+
```
103+
104+
## Immutability
105+
106+
`addMilliseconds()` does not modify the original Date object:
107+
108+
```typescript
109+
const originalDate = new Date(2024, 7, 15, 14, 30, 45, 123);
110+
const modifiedDate = addMilliseconds(originalDate, 500);
111+
112+
console.log(originalDate); // August 15, 2024 14:30:45.123 (unchanged)
113+
console.log(modifiedDate); // August 15, 2024 14:30:45.623 (new object)
114+
```
115+
116+
## See Also
117+
118+
- [`addYears()`](./addYears) - Add/subtract years
119+
- [`addMonths()`](./addMonths) - Add/subtract months
120+
- [`addDays()`](./addDays) - Add/subtract days
121+
- [`addHours()`](./addHours) - Add/subtract hours
122+
- [`addMinutes()`](./addMinutes) - Add/subtract minutes
123+
- [`addSeconds()`](./addSeconds) - Add/subtract seconds
124+
- [`subtract()`](./subtract) - Calculate differences with Duration objects

0 commit comments

Comments
 (0)