NULL is a specific value, not a string literal. It should be passed to query directly, i.e.
INSERT INTO `Schedule` (`ETA`,`STA`,`ATA`)
    VALUES ('2013-08-28 12:30:00', NULL, NULL);
that means your PHP code should handle that and not enclose NULL-s:
$timeFormatAndNull = function ($format) {
    return function($time) use ($format) {
        $time = strtotime($time);
        return $time ? strftime($format, $time) : 'NULL';
    };
};
$operationalLocalDate = function($arrivals, $callback) {
    return function($i, $date) use ($arrivals, $callback) {
        return $callback(
           $arrivals[$i]["operationalTimes"][$date]["dateLocal"])
        );
    };
};
and
$formatTime = $operationalLocalDate(
    $arrivals
    $timeFormatAndNull("'%Y-%m-%d %H:%M:%S'")
);
$query = sprintf(
    "INSERT INTO `Schedule` (`ETA`,`STA`,`ATA`) VALUES (%s, %s, %s);"
    , $formatTime($i, "estimatedGateArrival")
    , $formatTime($i, "scheduledGateArrival")
    , $formatTime($i, "actualGateArrival")
);
2
solved Proper use of NULL in mysql query from php