Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Mesmo digitando uma data válida persiste o erro "data de ida inválida"

Classe Viagem

<?php

class Viagem
{

  var $origem;
  var $destino;
  var $data_ida;
  var $data_volta;
  var $classe;
  var $adultos;
  var $criancas;
  var $preco;

  function __construct(
    $origem,
    $destino,
    $data_ida,
    $data_volta,
    $classe,
    $adultos,
    $criancas,
    $preco

  ) {
    //referênciar os médos de validação na função __construct
    if (!$this->dataValida($data_ida)) throw new Exception("Data de ida inválida");

    if (!$this->dataValida($data_volta)) throw new Exception("Data de volta inválida");


    $this->origem = $origem;
    $this->destino = $destino;
    $this->data_ida = $data_ida;
    $this->data_volta = $data_volta;
    $this->classe = $classe;
    $this->adultos = $adultos;
    $this->criancas = $criancas;
    $this->preco = $preco;
  }

  public function dataValida($data)
  {

    // Verifica se o campo data está no padrão de 10 caractéres
    if (strlen($data) != 10) {
      return false;
    }

    // O método strpos procura a ocorrência de um caracter especial em uma string
    if (!strpos($data, "-")) {
      return false;
    }

    // O método explode separa a string em partes
    $partes = explode("-", $data);

    // Isola o valor de ano, mês e dia
    $ano = $partes[0];
    $mes = $partes[1];
    $dia = $partes[2];

    // Valida se o ano está no padrão de 4 caractéres
    if (strlen($ano) != 4) {
      return false;
    }

    // O método checkdate verifica se a data informada existe
    if (!checkdate($mes, $dia, $ano)) {
      return false;
    }

    $dataAtual = date("Y-m-d");

    // O método strtotime converte a data gerada no padrão de string para o padrão de data
    if (strtotime($data) < strtotime($dataAtual)) {
      return false;
    }
  }
}
2 respostas
solução!

Em nenhum momento na função de validação você retorna true, mesmo que na validação não caia em nenhum return false.

A função acaba retornando void, e a negação de vazio = true, e aí ele lança o erro de data inválida

Era isso mesmo Gustavo,

Valeu