Date Arithmetic in JavaScript

Add and subtract time from dates

BeginnerDate/Time ProgramsExample 3 of 10
date-arithmetic.js
1// Method 1: Add/subtract days
2function addDays(date, days) {
3 const result = new Date(date);
4 result.setDate(result.getDate() + days);
5 return result;
6}
7
8function subtractDays(date, days) {
9 return addDays(date, -days);
10}
11
12const today = new Date();
13console.log('Today:', today);
14console.log('Tomorrow:', addDays(today, 1));
15console.log('Yesterday:', subtractDays(today, 1));
16
17// Method 2: Add/subtract months
18function addMonths(date, months) {
19 const result = new Date(date);
20 result.setMonth(result.getMonth() + months);
21 return result;
22}
23
24console.log('Next month:', addMonths(today, 1));
25console.log('Last month:', addMonths(today, -1));
26
27// Method 3: Add/subtract years
28function addYears(date, years) {
29 const result = new Date(date);
30 result.setFullYear(result.getFullYear() + years);
31 return result;
32}
33
34console.log('Next year:', addYears(today, 1));
35
36// Method 4: Add/subtract hours
37function addHours(date, hours) {
38 const result = new Date(date);
39 result.setHours(result.getHours() + hours);
40 return result;
41}
42
43console.log('In 2 hours:', addHours(today, 2));
44
45// Method 5: Add/subtract minutes
46function addMinutes(date, minutes) {
47 const result = new Date(date);
48 result.setMinutes(result.getMinutes() + minutes);
49 return result;
50}
51
52console.log('In 30 minutes:', addMinutes(today, 30));
53
54// Method 6: Using timestamps
55function addTime(date, milliseconds) {
56 return new Date(date.getTime() + milliseconds);
57}
58
59console.log('Add 1 day (ms):', addTime(today, 24 * 60 * 60 * 1000));
60console.log('Add 1 hour (ms):', addTime(today, 60 * 60 * 1000));
61
62// Method 7: Date difference
63function dateDifference(date1, date2) {
64 const diff = Math.abs(date1 - date2);
65 const days = Math.floor(diff / (1000 * 60 * 60 * 24));
66 const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
67 const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
68 return { days, hours, minutes };
69}
70
71const date1 = new Date('2024-01-01');
72const date2 = new Date('2024-01-15');
73console.log('Difference:', dateDifference(date1, date2));

Output

Today: 2024-01-15T10:30:45.123Z
Tomorrow: 2024-01-16T10:30:45.123Z
Yesterday: 2024-01-14T10:30:45.123Z
Next month: 2024-02-15T10:30:45.123Z
Last month: 2023-12-15T10:30:45.123Z
Next year: 2025-01-15T10:30:45.123Z
In 2 hours: 2024-01-15T12:30:45.123Z
In 30 minutes: 2024-01-15T11:00:45.123Z
Add 1 day (ms): 2024-01-16T10:30:45.123Z
Add 1 hour (ms): 2024-01-15T11:30:45.123Z
Difference: { days: 14, hours: 0, minutes: 0 }

What's going on

Date arithmetic manipulates dates.

Methods

setDate/setMonth/setFullYear
setHours/setMinutes/setSeconds
Using timestamps

Adding Time

Days: setDate(getDate() + n)
Months: setMonth(getMonth() + n)
Years: setFullYear(getFullYear() + n)
Hours/Minutes: setHours/getMinutes

Subtracting

Use negative values
Or subtract from timestamp

Date Difference

Calculate milliseconds
Convert to days/hours/minutes
Handle timezones

Best Practices

Create new Date objects
Don't mutate original
Handle month/year boundaries
Use timestamps for precision