JSFiddle - React, Tailwind, and code Playground
CoffeeScript
days = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
calculateDay = (year,month,day) ->
c = +((''+year)[0..1])
y = +((''+year)[2..3])
y %= 28
m = [6,2,2,5,0,3,5,1,4,6,2,4][month]
if month < 2 and y%4==0 and (year%100!=0 or year%400==0)
m-= 1
y += y/4|0
if c < 20
y += (20-c)*2-1
return days[(y+m+day)%7]
# to test
validForDate = (year,month,day) ->
t = calculateDay(year,month,day)
r = days[new Date(year,month,day).getDay()]
return t == r
# test first day of month for every year since 1600 - present
for y in [1600..2014]
for m in [0..11]
if !validForDate(y,m,0)
console.log("Not valid for #{m+1}/1/#{y}")