Great start. Now let's add leap years. =)
days y m = 28 + (m + (m `div` 8)) `mod` 2 + 2 `mod` m + 2 * (1 `div` m)
+ ((2 `div` m) `mod` 2) * (leap y)
where leap y = multiple 4 y - multiple 100 y + multiple 400 y
where multiple int y = ((y + (int - 1)) `mod` int + 1) `div` int function f(x) { return 28 + maybeLeap(x) + (...); }
I remember it's something related with "(x % 4) == 0" and "not ends_with(00)" leap = function(x) {
if ((x % 4) != 0) {
return 0;
}
return Number(
(x % 100) != 0 || (x % 400) == 0
);
}
function(x) { return 28 + leap(x) + (...) };