Função para filtrar registros por data PDO

Preciso de dicas de como fazer um filtro por data no banco de dados. Estou usando php “puro” no padrão mvc.

1- Minha tabela no banco de dados faz um backup dela mesma as 00:00 duplicando todos registros todos os dias só atualizando a coluna da data para o novo dia. Tirando a coluna da data, que é DtBase, o resto será constantemente editado.(Já possuo função para este edit)

2- Preciso de um input para informar uma data, fazer uma consulta no banco e me retornar só os registros que obter esta data.

3- Na mesma paginá que farei este input, possuo 3 tabelas html que já me retornam todos os registros do banco com um select.

4- Quero que imprima estes registros dentro das mesmas 3 tabelas só que com esse filtro dito acima da data.

Tudo isso seria para controle, por exemplo: Estou no dia 24 do mês e quero consultar essas 3 tabelas, como estavam no dia 20.

Imagem do banco de dados:

Código que tenho até agora para entenderem melhor:
Programacao.php (view):

<form method="POST" action="../controller/progPrecontrole.php">
    <div class="large-12 columns">
        <div class="TableCSS" >
            <table>
                <tr>
                    <td>ST</td>
                    <td>BITRUCK</td>
                    <td>Motorista</td>
                    <td>Data Saída</td>
                    <td>Origem</td>
                    <td>Destino</td>
                    <td>Previsão chegada</td>
                    <td>Carga/Manifesto</td>
                    <td>Adiantamento Fincanceiro</td>
                    <td>Agendas</td>
                    <td>Malotes</td>
                    <td colspan="2">Observação</td>
                </tr>
                <?php
                    foreach ($controller->ListaPorTipoB() as $objProg) {
                ?>
                <tr>
                    <td>
                    <?php 
                        echo ($controller->RetornarCarctere($objProg->getst()));
                    ?>
                    </td>
                    <td><?php echo $objProg->getplaca(); ?></td>
                    <td><?php echo $objProg->getmot(); ?></td>
                    <td><?php echo $objProg->getsaida(); ?></td>
                    <td><?php echo $objProg->getorig(); ?></td>
                    <td><?php echo $objProg->getdest(); ?></td>
                    <td><?php echo $objProg->getprev(); ?></td>
                    <td><?php echo $objProg->getcarga(); ?></td>
                    <td><?php echo $objProg->getadfin(); ?></td>
                    <td><?php echo $objProg->getagen(); ?></td>
                    <td><?php echo $objProg->getmal(); ?></td>
                    <td class="t1" ><div><?php echo $objProg->getobs(); ?></div></td>
                    <td><a href="edita.php?id=<?php echo $objProg->getid();?>"><p>Alterar</p></a></td>
                </tr>
                <?php
                    }
                ?>
            </table>
        </div>
  </form>

Funções que possuo até agora:
progDAO.php(DAO):

class ProgDAO{

private $conn;

public function __construct($connection) {
  $this->conn = $connection;
}

public function ListaPorTipoB($tipo){
 $results = array();
 $stmt = $this->conn->prepare('SELECT * FROM GTCLogist WHERE DsTpVeiculo = ?');
 $stmt->execute(array($tipo));
    if($stmt) {
        while($row = $stmt->fetch(PDO::FETCH_OBJ)) {
            $prog = new Prog();
            $prog->setid($row->ID);
            $prog->setst($row->DsStatus);
            $prog->setplaca($row->NrPlaca);
            $prog->setmot(stripslashes($row->DsMotorista));
            $prog->setsaida(date('d/m/Y', strtotime($row->DtSaida)));
            $prog->setorig($row->DsOrigem);
            $prog->setdest($row->DsDestino);
            $prog->setprev(date('d/m/Y', strtotime($row->DtPrevChegDest)));
            $prog->setcarga($row->DsCarga);
            $prog->setadfin($row->DsAdFin);
            $prog->setagen($row->DsAgendas);
            $prog->setmal($row->DsMalote);
            $prog->setobs($row->DsObservacao);
            $results[] = $prog;
        }
    }
  return $results;
}

public function ListaPorTipoT($tipo){
 $results = array();
 $stmt = $this->conn->prepare('SELECT * FROM GTCLogist WHERE DsTpVeiculo = ?');
 $stmt->execute(array($tipo));
    if($stmt) {
        while($row = $stmt->fetch(PDO::FETCH_OBJ)) {
            $prog = new Prog();
            $prog->setid($row->ID);
            $prog->setst($row->DsStatus);
            $prog->setplaca($row->NrPlaca);
            $prog->setmot(stripslashes($row->DsMotorista));
            $prog->setsaida(date('d/m/Y', strtotime($row->DtSaida)));
            $prog->setorig($row->DsOrigem);
            $prog->setdest($row->DsDestino);
            $prog->setprev(date('d/m/Y', strtotime($row->DtPrevChegDest)));
            $prog->setcarga($row->DsCarga);
            $prog->setadfin($row->DsAdFin);
            $prog->setagen($row->DsAgendas);
            $prog->setmal($row->DsMalote);
            $prog->setobs($row->DsObservacao);
            $results[] = $prog;
        }
    }
 return $results;
}

public function ListaPorTipoC($tipo){
 $results = array();
 $stmt = $this->conn->prepare('SELECT * FROM GTCLogist WHERE DsTpVeiculo = ?');
 $stmt->execute(array($tipo));
    if($stmt) {
        while($row = $stmt->fetch(PDO::FETCH_OBJ)) {
            $prog = new Prog();
            $prog->setid($row->ID);
            $prog->setst($row->DsStatus);
            $prog->setcarreta($row->CdCarreta);
            $prog->setplaca($row->NrPlaca);
            $prog->setmot(stripslashes($row->DsMotorista));
            $prog->setsaida(date('d/m/Y', strtotime($row->DtSaida)));
            $prog->setorig($row->DsOrigem);
            $prog->setdest($row->DsDestino);
            $prog->setprev(date('d/m/Y', strtotime($row->DtPrevChegDest)));
            $prog->setcarga($row->DsCarga);
            $prog->setadfin($row->DsAdFin);
            $prog->setagen($row->DsAgendas);
            $prog->setmal($row->DsMalote);
            $prog->setobs($row->DsObservacao);
            $results[] = $prog;
        }
    }
  return $results;
}

public function editar(Prog $prog){
$this->conn->beginTransaction();
try {
    $stmt = $this->conn->prepare(
        'UPDATE GTCLogist SET DsStatus = :DsStatus, DsMotorista = :DsMotorista, DtSaida = :DtSaida, 
        DsOrigem = :DsOrigem, DsDestino = :DsDestino, DtPrevChegDest = :DtPrevChegDest, DsCarga = :DsCarga, 
        DsAdFin = :DsAdFin, DsAgendas = :DsAgendas, DsMalote = :DsMalote, DsObservacao = :DsObservacao,
        CdCarreta = :CdCarreta 
        WHERE ID = :ID'
    );
    $stmt->bindValue(':ID', $prog->getid(), PDO::PARAM_INT);
    $stmt->bindValue(':DsStatus', $prog->getst(), PDO::PARAM_INT);
    $stmt->bindValue(':DsMotorista', $prog->getmot(), PDO::PARAM_STR);
    $stmt->bindValue(':DtSaida', $prog->getsaida(), PDO::PARAM_INT);
    $stmt->bindValue(':DsOrigem', $prog->getorig(), PDO::PARAM_STR);
    $stmt->bindValue(':DsDestino', $prog->getdest(), PDO::PARAM_STR);
    $stmt->bindValue(':DtPrevChegDest', $prog->getprev(), PDO::PARAM_INT);
    $stmt->bindValue(':DsCarga', $prog->getcarga(), PDO::PARAM_STR);
    $stmt->bindValue(':DsAdFin', $prog->getadfin(), PDO::PARAM_INT);
    $stmt->bindValue(':DsAgendas', $prog->getagen(), PDO::PARAM_STR);
    $stmt->bindValue(':DsMalote', $prog->getmal(), PDO::PARAM_STR);
    $stmt->bindValue(':DsObservacao', $prog->getobs(), PDO::PARAM_STR);
    $stmt->bindValue(':CdCarreta', $prog->getcarreta(), PDO::PARAM_INT);
    $stmt->execute();
    $this->conn->commit();
}
catch(Exception $e) {
    $this->conn->rollback();
}
}
public function listar($id){
    $prog = new Prog();
    $stmt = $this->conn->prepare(
        'SELECT * FROM GTCLogist WHERE ID = :ID'
    );
    $stmt->bindValue(':ID', $id, PDO::PARAM_INT);
    $stmt->execute();
    if($stmt) {
        while($row = $stmt->fetch(PDO::FETCH_OBJ)) {
            $prog->setid($row->ID);
            $prog->setst($row->DsStatus);
            $prog->setcarreta($row->CdCarreta);
            $prog->setplaca(stripslashes($row->NrPlaca));
            $prog->setmot($row->DsMotorista);
            $prog->setsaida(date('d/m/Y', strtotime($row->DtSaida)));
            $prog->setorig($row->DsOrigem);
            $prog->setdest($row->DsDestino);
            $prog->setprev(date('d/m/Y', strtotime($row->DtPrevChegDest)));
            $prog->setcarga($row->DsCarga);
            $prog->setadfin($row->DsAdFin);
            $prog->setagen($row->DsAgendas);
            $prog->setmal($row->DsMalote);
            $prog->setobs($row->DsObservacao);
        }
    }
   return $prog;
}

Controller:

<?php

class Comando{

 private $conn;

 public function __construct($connec) {
   $this->conn = $connec;
 }

 public function ListaPorTipoB(){
   $dao = new ProgDAO($this->conn);
   return $dao -> ListaPorTipoB('Bitruck');
 }

 public function ListaPorTipoT(){
   $dao = new ProgDAO($this->conn);
   return $dao -> ListaPorTipoT('Truck');
 }

 public function ListaPorTipoC(){
   $dao = new ProgDAO($this->conn);
   return $dao -> ListaPorTipoC('Cavalo Truck');
 }

 public function ListaData(){
   $dao = new ProgDAO($this->conn);
   return $dao -> ListaData();
 }

 public function editar(Prog $objProg){
   $dao = new ProgDAO($this->conn);
   return $dao -> editar($objProg);
 }

 public function listar($id){
   $dao = new ProgDAO($this->conn);
   return $dao -> listar($id);
 }

 public function RetornarCarctere($x){
   $dao = new ProgDAO($this->conn);
   return $dao -> RetornarCarctere($x);
 }
}

PreController:

$id = $_POST['id'];
$DsMotorista = $_POST['mot'];
$DtSaida = $_POST['saida'];
$DsOrigem = $_POST['orig'];
$DsDestino = $_POST['dest'];
$DtPrevChegDest = $_POST['prev'];
$DsCarga = $_POST['carga'];
$DsAdFin = $_POST['adfin'];
$DsAgendas = $_POST['agen'];
$DsMalote = $_POST['mal'];
$DsObservacao = $_POST['obs'];
$CdCarreta = $_POST['carreta'];
$DsStatus = $_POST['st'];
$DtBase = $_POST['data'];
$selecionado = $_REQUEST['st'];



$objProg = new Prog();
$objProg->setid($id);
$objProg->setmot($DsMotorista);
$objProg->setsaida($DtSaida);
$objProg->setorig($DsOrigem);
$objProg->setdest($DsDestino);
$objProg->setprev($DtPrevChegDest);
$objProg->setcarga($DsCarga);
$objProg->setadfin($DsAdFin);
$objProg->setagen($DsAgendas);
$objProg->setmal($DsMalote);
$objProg->setobs($DsObservacao);
$objProg->setcarreta($CdCarreta);
$objProg->setst($DsStatus);
$objProg->setdata($DtBase);

$controller = new Comando($conn);
	
if (!empty($id)){
	$objProg->setid($id);
	$controller->editar($objProg);
}
	
header ("location: ../view/programacao.php?id=".$id);

Não possuo muito conhecimento em PHP e estou disposto a receber ideias para melhoras. Se alguem puder ajudar, agradeço.