You don't want to create a field called 'datetime' as varchar. It s/b a DateTime type.
$sql = "INSERT INTO comments
(name, datetime, email, comments, approvedby, status, post_id)
VALUES(:name, :email, :datetime, :comments, 'Pending', 'OFF', :post_id)";
Looking at your query statement do you see that you have mis-aligned fieldnames and values? You're trying to load an email into a datetime field and the reverse
PS - I recommend switching to the array method of assigning the values instead of the tedious bind function as in this:
$sql = "INSERT INTO comments(name,datetime,email,comments,approvedby,status,post_id)";
$sql .= "VALUES(:name,:email,:datetime,:comments,'Pending','OFF',:post_id)";
$parms = array(
':name'=>$name,
':datetime'=>$dt,
':email'=>$email,
'comments'=>$comments,
':post_id'=>$postid);
if($sucess = $stmt->execute($parms))
{