# Python 3, 712652636567563552550548529529 540 bytes

At last, I found time to write an answer for this excellent question. It isn't very golfed yet (the month names list and the number of days list are is particularly egregious in this case, and the fact that handling negative D requires a separate while loop) but at least it's an answer.

Edit: Fixing a bug

def h(s,n):
x=s[:-3].split(", ");x=[1]*(len(x)<3)+x;t="Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down".split(",");p,q,r=int(x[0])+n,t.index(x[1]),int(x[2]);d=[30,1,30,30]*4+[1,30]30];d[10]=r%4<1
while p>d[q]or p<1:d[10]=r%4<1;a=[a=[-1,1][p<1];q=(q-a)%18;p+=a*d[q-(a<0)];r-=a*(q<1)=a*0**q;d[10]=r%4<1
return', '.join([str(p)]*(d[q]>2)+[t[q],str(r)])+" DR"

def harptos(date, num):
t = "Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down"
t = t.split(",")        # split up the names of the months
x = date[:-3]           # removes " DR"
x = x.split(", ")
if len(x) < 3:
x = [1] + x         # if we have two items (holiday), append a "day of the month"
p = int(x[0]) + num     # initialize the "date" by adding num to it
q = t.index(x[1])
r = int(x[2])
d=[30,1,30,30]*4+[1,30] # all the month lengths
whiled[10] p= >r%4 d[q]:< 1         # while theleap "date"year >toggle
the number of dayswhile inp the> currentd[q]: month
d[10]# =while r%4the <"date" 1> the number of days #in leapthe yearcurrent togglemonth
p -= d[q]           # decrement by number of days in current month
q = (q+1)%18        # increment month
r += q<1 0**q           # increment year if the incremented month == the first month
while p < 1:   d[10] = r%4 < 1     # whileleap theyear "date"toggle
is negative
while p < 1:   d[10] = r%4 < 1     # leapwhile yearthe toggle"date" is negative
q = (q-1)%18        # decrement month first
p += d[q]           # add the number of days in the decremented month
r -= q<10**q            # decrement year if the decremented month == the first month
d[10] = r%4 < 1     # leap year toggle
m = [t[q],str(r)]       # start the result array
if d[q] > 2:
m = [str(p)] + m    # if the month is NOT a holiday, add the day
return ", ".join(m) + " DR"


# Python 3, 712652636567563552550548529 bytes

At last, I found time to write an answer for this excellent question. It isn't very golfed yet (the month names list and the number of days list are is particularly egregious in this case, and the fact that handling negative D requires a separate while loop) but at least it's an answer.

def h(s,n):
x=s[:-3].split(", ");x=[1]*(len(x)<3)+x;t="Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down".split(",");p,q,r=int(x[0])+n,t.index(x[1]),int(x[2]);d=[30,1,30,30]*4+[1,30]
while p>d[q]or p<1:d[10]=r%4<1;a=[-1,1][p<1];q=(q-a)%18;p+=a*d[q-(a<0)];r-=a*(q<1)
return', '.join([str(p)]*(d[q]>2)+[t[q],str(r)])+" DR"

def harptos(date, num):
t = "Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down"
t = t.split(",")        # split up the names of the months
x = date[:-3]           # removes " DR"
x = x.split(", ")
if len(x) < 3:
x = [1] + x         # if we have two items (holiday), append a "day of the month"
p = int(x[0]) + num     # initialize the "date" by adding num to it
q = t.index(x[1])
r = int(x[2])
d=[30,1,30,30]*4+[1,30] # all the month lengths
while p > d[q]:         # while the "date" > the number of days in the current month
d[10] = r%4 < 1     # leap year toggle
p -= d[q]           # decrement by number of days in current month
q = (q+1)%18        # increment month
r += q<1            # increment year if the incremented month == the first month
while p < 1:            # while the "date" is negative
d[10] = r%4 < 1     # leap year toggle
q = (q-1)%18        # decrement month first
p += d[q]           # add the number of days in the decremented month
r -= q<1            # decrement year if the decremented month == the first month
m = [t[q],str(r)]       # start the result array
if d[q] > 2:
m = [str(p)] + m    # if the month is NOT a holiday, add the day
return ", ".join(m) + " DR"


# Python 3, 712652636567563552550548529 540 bytes

At last, I found time to write an answer for this excellent question. It isn't very golfed yet (the month names list and the number of days list are is particularly egregious in this case, and the fact that handling negative D requires a separate while loop) but at least it's an answer.

Edit: Fixing a bug

def h(s,n):
x=s[:-3].split(", ");x=[1]*(len(x)<3)+x;t="Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down".split(",");p,q,r=int(x[0])+n,t.index(x[1]),int(x[2]);d=[30,1,30,30]*4+[1,30];d[10]=r%4<1
while p>d[q]or p<1:a=[-1,1][p<1];q=(q-a)%18;p+=a*d[q-(a<0)];r-=a*0**q;d[10]=r%4<1
return', '.join([str(p)]*(d[q]>2)+[t[q],str(r)])+" DR"

def harptos(date, num):
t = "Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down"
t = t.split(",")        # split up the names of the months
x = date[:-3]           # removes " DR"
x = x.split(", ")
if len(x) < 3:
x = [1] + x         # if we have two items (holiday), append a "day of the month"
p = int(x[0]) + num     # initialize the "date" by adding num to it
q = t.index(x[1])
r = int(x[2])
d=[30,1,30,30]*4+[1,30] # all the month lengths
d[10] = r%4 < 1         # leap year toggle
while p > d[q]:         # while the "date" > the number of days in the current month
p -= d[q]           # decrement by number of days in current month
q = (q+1)%18        # increment month
r += 0**q           # increment year if the incremented month == the first month
d[10] = r%4 < 1     # leap year toggle
while p < 1:            # while the "date" is negative
q = (q-1)%18        # decrement month first
p += d[q]           # add the number of days in the decremented month
r -= 0**q            # decrement year if the decremented month == the first month
d[10] = r%4 < 1     # leap year toggle
m = [t[q],str(r)]       # start the result array
if d[q] > 2:
m = [str(p)] + m    # if the month is NOT a holiday, add the day
return ", ".join(m) + " DR"

11 More golfing

# Python 3, 712652636567563552550548548 529 bytes

def h(s,n):
x=s[:-3].split(", ");x=[1]*(len(x)<3)+x;k=30;t="Deepwinter+x;t="Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down".split(",");p,q,r=int(x[0])+n,t.index(x[1]),int(x[2]);d=[k,1,k,k]*2+[k;d=[30,1,r%4<1,k]+[k30,130]*4+[1,k]*230]
while p>d[q]or p<1:a=[d[10]=r%4<1;a=[-1,1][p<1];q=(q-a)%18;p+=a*d[q-(a<0)];r-=a*(q<1);d[10]=r%4<1
return', '.join([str(p)]*(d[q]>2)+[t[q],str(r)])+" DR"

def harptos(date, num):
t = "Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down"
t = t.split(",")        # split up the names of the months
x = date[:-3]           # removes " DR"
x = x.split(", ")
k = 30
if len(x) < 3:
x = [1] + x         # if we have two items (holiday), append a "day of the month"
p = int(x[0]) + num     # initialize the "date" by adding num to it
q = t.index(x[1])
r = int(x[2])
d = [k,1,k,k]*2+[kd=[30,1,r%4<1,k]+[k30,130]*4+[1,k]*2
30] # all the month lengths
while p > d[q]:         # while the "date" > the number of days in the current month
d[10] = r%4 < 1     # leap year toggle
p -= d[q]           # decrement by number of days in current month
q = (q+1)%18        # increment month
r += q<1            # increment year if the incremented month == the first month
while p < 1: d[10] = r%4 < 1     # leap year# toggle
while the "date" is whilenegative
p < 1:     d[10] = r%4 < 1   # while the# "date"leap isyear negativetoggle
q = (q-1)%18        # decrement month first
p += d[q]           # add the number of days in the decremented month
r -= q<1            # decrement year if the decremented month == the first month
d[10] = r%4 < 1     # leap year toggle
m = [t[q],str(r)]       # start the result array
if d[q] > 2:
m = [str(p)] + m    # if the month is NOT a holiday, add the day
return ", ".join(m) + " DR"


# Python 3, 712652636567563552550548 bytes

def h(s,n):
x=s[:-3].split(", ");x=[1]*(len(x)<3)+x;k=30;t="Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down".split(",");p,q,r=int(x[0])+n,t.index(x[1]),int(x[2]);d=[k,1,k,k]*2+[k,1,r%4<1,k]+[k,1,k]*2
while p>d[q]or p<1:a=[-1,1][p<1];q=(q-a)%18;p+=a*d[q-(a<0)];r-=a*(q<1);d[10]=r%4<1
return', '.join([str(p)]*(d[q]>2)+[t[q],str(r)])+" DR"

def harptos(date, num):
t = "Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down"
t = t.split(",")        # split up the names of the months
x = date[:-3]           # removes " DR"
x = x.split(", ")
k = 30
if len(x) < 3:
x = [1] + x         # if we have two items (holiday), append a "day of the month"
p = int(x[0]) + num     # initialize the "date" by adding num to it
q = t.index(x[1])
r = int(x[2])
d = [k,1,k,k]*2+[k,1,r%4<1,k]+[k,1,k]*2
# all the month lengths
while p > d[q]:         # while the "date" > the number of days in the current month
p -= d[q]           # decrement by number of days in current month
q = (q+1)%18        # increment month
r += q<1            # increment year if the incremented month == the first month
d[10] = r%4 < 1     # leap year toggle
while p < 1:            # while the "date" is negative
q = (q-1)%18        # decrement month first
p += d[q]           # add the number of days in the decremented month
r -= q<1            # decrement year if the decremented month == the first month
d[10] = r%4 < 1     # leap year toggle
m = [t[q],str(r)]       # start the result array
if d[q] > 2:
m = [str(p)] + m    # if the month is NOT a holiday, add the day
return ", ".join(m) + " DR"


# Python 3, 712652636567563552550548 529 bytes

def h(s,n):
x=s[:-3].split(", ");x=[1]*(len(x)<3)+x;t="Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down".split(",");p,q,r=int(x[0])+n,t.index(x[1]),int(x[2]);d=[30,1,30,30]*4+[1,30]
while p>d[q]or p<1:d[10]=r%4<1;a=[-1,1][p<1];q=(q-a)%18;p+=a*d[q-(a<0)];r-=a*(q<1)
return', '.join([str(p)]*(d[q]>2)+[t[q],str(r)])+" DR"

def harptos(date, num):
t = "Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down"
t = t.split(",")        # split up the names of the months
x = date[:-3]           # removes " DR"
x = x.split(", ")
if len(x) < 3:
x = [1] + x         # if we have two items (holiday), append a "day of the month"
p = int(x[0]) + num     # initialize the "date" by adding num to it
q = t.index(x[1])
r = int(x[2])
d=[30,1,30,30]*4+[1,30] # all the month lengths
while p > d[q]:         # while the "date" > the number of days in the current month
d[10] = r%4 < 1     # leap year toggle
p -= d[q]           # decrement by number of days in current month
q = (q+1)%18        # increment month
r += q<1            # increment year if the incremented month == the first month
while p < 1:            # while the "date" is negative
d[10] = r%4 < 1     # leap year toggle
q = (q-1)%18        # decrement month first
p += d[q]           # add the number of days in the decremented month
r -= q<1            # decrement year if the decremented month == the first month
m = [t[q],str(r)]       # start the result array
if d[q] > 2:
m = [str(p)] + m    # if the month is NOT a holiday, add the day
return ", ".join(m) + " DR"

10 More golfing

# Python 3, 712652636567563552550550 548 bytes

def h(s,n):
x=s[:-3].split(", ");x=[1]*(len(x)<3)+x;t="Deepwinter+x;k=30;t="Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down".split(",");p,q,r=int(x[0])+n,t.index(x[1]),int(x[2]);d=[30;d=[k,1,30k,30]*2+[30k]*2+[k,1,r%4<1,30]+[30k]+[k,1,30]*2k]*2
while p>d[q]or p<1:a=[-1,1][p<1];q=(q-a)%18;p+=a*d[q-(a<0)];r-=a*(q<1);d[10]=r%4<1
return', '.join([str(p)]*(d[q]>2)+[t[q],str(r)])+" DR"

def harptos(date, num):
t = "Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down"
t = t.split(",")        # split up the names of the months
x = date[:-3]           # removes " DR"
x = x.split(", ")
k = 30
if len(x) < 3:
x = [1] + x         # if we have two items (holiday), append a "day of the month"
p = int(x[0]) + num     # initialize the "date" by adding num to it
q = t.index(x[1])
r = int(x[2])
d = [30[k,1,30k,30]*2+[30k]*2+[k,1,r%4<1,30]+[30k]+[k,1,30]*2k]*2
# all the month lengths
while p > d[q]:         # while the "date" > the number of days in the current month
p -= d[q]           # decrement by number of days in current month
q = (q+1)%18        # increment month
r += q<1            # increment year if the incremented month == the first month
d[10] = r%4 < 1     # leap year toggle
while p < 1:            # while the "date" is negative
q = (q-1)%18        # decrement month first
p += d[q]           # add the number of days in the decremented month
r -= q<1            # decrement year if the decremented month == the first month
d[10] = r%4 < 1     # leap year toggle
m = [t[q],str(r)]       # start the result array
if d[q] > 2:
m = [str(p)] + m    # if the month is NOT a holiday, add the day
return ", ".join(m) + " DR"


# Python 3, 712652636567563552550 bytes

def h(s,n):
x=s[:-3].split(", ");x=[1]*(len(x)<3)+x;t="Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down".split(",");p,q,r=int(x[0])+n,t.index(x[1]),int(x[2]);d=[30,1,30,30]*2+[30,1,r%4<1,30]+[30,1,30]*2
while p>d[q]or p<1:a=[-1,1][p<1];q=(q-a)%18;p+=a*d[q-(a<0)];r-=a*(q<1);d[10]=r%4<1
return', '.join([str(p)]*(d[q]>2)+[t[q],str(r)])+" DR"

def harptos(date, num):
t = "Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down"
t = t.split(",")        # split up the names of the months
x = date[:-3]           # removes " DR"
x = x.split(", ")
if len(x) < 3:
x = [1] + x         # if we have two items (holiday), append a "day of the month"
p = int(x[0]) + num     # initialize the "date" by adding num to it
q = t.index(x[1])
r = int(x[2])
d = [30,1,30,30]*2+[30,1,r%4<1,30]+[30,1,30]*2
# all the month lengths
while p > d[q]:         # while the "date" > the number of days in the current month
p -= d[q]           # decrement by number of days in current month
q = (q+1)%18        # increment month
r += q<1            # increment year if the incremented month == the first month
d[10] = r%4 < 1     # leap year toggle
while p < 1:            # while the "date" is negative
q = (q-1)%18        # decrement month first
p += d[q]           # add the number of days in the decremented month
r -= q<1            # decrement year if the decremented month == the first month
d[10] = r%4 < 1     # leap year toggle
m = [t[q],str(r)]       # start the result array
if d[q] > 2:
m = [str(p)] + m    # if the month is NOT a holiday, add the day
return ", ".join(m) + " DR"


# Python 3, 712652636567563552550 548 bytes

def h(s,n):
x=s[:-3].split(", ");x=[1]*(len(x)<3)+x;k=30;t="Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down".split(",");p,q,r=int(x[0])+n,t.index(x[1]),int(x[2]);d=[k,1,k,k]*2+[k,1,r%4<1,k]+[k,1,k]*2
while p>d[q]or p<1:a=[-1,1][p<1];q=(q-a)%18;p+=a*d[q-(a<0)];r-=a*(q<1);d[10]=r%4<1
return', '.join([str(p)]*(d[q]>2)+[t[q],str(r)])+" DR"

def harptos(date, num):
t = "Deepwinter,Midwinter,The Claw of Winter,The Claw of the Sunsets,The Claw of the Storms,Greengrass,The Melting,The Time of Flowers,Summertide,Midsummer,Shieldmeet,Highsun,The Fading,Highharvestide,Leaffall,The Rotting,The Feast of the Moon,The Drawing Down"
t = t.split(",")        # split up the names of the months
x = date[:-3]           # removes " DR"
x = x.split(", ")
k = 30
if len(x) < 3:
x = [1] + x         # if we have two items (holiday), append a "day of the month"
p = int(x[0]) + num     # initialize the "date" by adding num to it
q = t.index(x[1])
r = int(x[2])
d = [k,1,k,k]*2+[k,1,r%4<1,k]+[k,1,k]*2
# all the month lengths
while p > d[q]:         # while the "date" > the number of days in the current month
p -= d[q]           # decrement by number of days in current month
q = (q+1)%18        # increment month
r += q<1            # increment year if the incremented month == the first month
d[10] = r%4 < 1     # leap year toggle
while p < 1:            # while the "date" is negative
q = (q-1)%18        # decrement month first
p += d[q]           # add the number of days in the decremented month
r -= q<1            # decrement year if the decremented month == the first month
d[10] = r%4 < 1     # leap year toggle
m = [t[q],str(r)]       # start the result array
if d[q] > 2:
m = [str(p)] + m    # if the month is NOT a holiday, add the day
return ", ".join(m) + " DR"

9 Editing the explanation
8 More golfing
7 added 10 characters in body
6 More golfing
5 More golfing
4 More golfing
3 More golfing
2 deleted 64 characters in body
1