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}")