#JavaScript (ES6), 62 60 59 bytes
JavaScript (ES6), 62 60 59 bytes
Takes input as a 0-padded string. Returns \$0\$ for false or a positive integer for true.
s=>(m=s[2]+s[3])<13&31-(m^2?~m%9%2:s%4?1:2)>(s/=1e4)&&~~s*m
or Check all possible outputs against an ungolfed implementation
###Commented
Commented
s => // s = input string
(m = s[2] + s[3]) // m = month, as a string
< 13 & // make sure that m is less than 13
31 - ( // compute the upper bound for this month:
m ^ 2 ? // if the month is not February:
~m % 9 % 2 // use either 31 or 32
: // else:
s % 4 ? // if this is not a leap year:
1 // use 30
: // else:
2 // use 29
) // end of upper bound computation
> (s /= 1e4) // make sure that it's greater than the day
&& ~~s * m // and finally make sure that day * month is not zero