Consider reading the documentation on checkdate and you'll see that it assumes the supplied params are integers. Check the documentation on date and if you read the comments, you'll realize that unix timestamps don't have a timezone associated with them, and there's some conversion that'll happen to whatever is set as the default timezone on your machine.
You might also clean up your code a bit by using a space as a deliminter when you convert $testdateX
to a date string.
$x = hexdec($testdateX);
$date = date("m d Y", $x);
$split = explode(' ', $date);
// the intval casts are optional, i think
$m = intval($split[0]);
$d = intval($split[1]);
$y = intval($split[2]);
$valid = checkdate($m, $d, $y);
echo $valid;```