<?php

class Data{
public function primeiroDiaMesAnterior()
{

    // Obtém a data atual
    $dataAtual = new DateTime();
    // Subtrai um mês da data atual
    $dataAnterior = $dataAtual->modify('first day of last month');
    // Formata a data no formato desejado (opcional)
    $primeiroDiaDoMesAnterior = $dataAnterior->format('Y-m-d');
    // Imprime o resultado
    return $primeiroDiaDoMesAnterior;
}

public function ultimoDiaDoMesAnterior()
{

    // Obtém a data atual
    $dataAtual = new DateTime();
    // Subtrai um mês da data atual
    $dataAnterior = $dataAtual->modify('last day of last month');
    // Formata a data no formato desejado (opcional)
    $ultimoDiaDoMesAnterior = $dataAnterior->format('Y-m-d');
    // Imprime o resultado
    return $ultimoDiaDoMesAnterior;
}


//primeiro dia formatado para sqlserver

//primeiro dia do mes usando -
public function primeiroDiaMes()
{
    $primeiroDiaDoMesAtual = date("Y-01-m"); // Primeiro dia do mês atual
    //$primeiroDiaMesAnterior = date( "Y-m-01", strtotime("-1 month", strtotime($primeiroDiaDoMesAtual)));

    return $primeiroDiaDoMesAtual;
}

//primeiro dia do mes usando /
    public function primeiroDiaMes2()
    {
        $primeiroDiaDoMesAtual = date("01/m/Y"); // Primeiro dia do mês atual
        //$primeiroDiaMesAnterior = date( "Y-m-01", strtotime("-1 month", strtotime($primeiroDiaDoMesAtual)));

        return $primeiroDiaDoMesAtual;
    }

//formatado para formulario html
public function primeiroDiaMes3()
{
    $primeiroDiaDoMesAtual = date("Y-m-01"); // Primeiro dia do mês atual
    return $primeiroDiaDoMesAtual;
}


//ultimo dia do mes atual
public function ultimoDiaDoMesAtual(){
    
    $dataAtual = new DateTime();

    // Definir o último dia do mês atual
    $ultimoDiaMes = $dataAtual->modify('last day of this month');

    // Exibir a data no formato desejado
    return $ultimoDiaMes->format('Y-m-d');
}

//funcao para buscar data ano anterior
public function anoAnterior($data = 0){

        if($data == 0) {
            //buscar ano atual
            $anoAtual = date('Y');
            //regredir um ano
            $anoAnterior = $anoAtual - 1;
            //dia atual
            $dia = date('d');
            //mes atual
            $mes = date('m');
        }else{
            $anoAtual = substr($data, 0, 4);
            $anoAnterior = $anoAtual - 1;

            $dia = substr($data, 8, 2);

            $mes = substr($data, 5, 2);

        }

        //montando data anterior
        $dataAnterior = $anoAnterior.'-'.$dia.'-'.$mes;

    //retorando uma string da data anterior
    return $dataAnterior;
}


public function sabadoAnoAnteriorEquivalente($data = null)
{
    $dataAtual = $data ? new DateTime($data) : new DateTime();

    // Dia da semana da data original (1=Seg ... 7=Dom)
    $diaSemanaAtual = $dataAtual->format('N');

    // Posição da ocorrência no mês (ex.: 3ª segunda-feira)
    $diaDoMes = (int)$dataAtual->format('j');
    $ordem = intdiv($diaDoMes - 1, 7) + 1;

    // Mês e ano anterior
    $mes = (int)$dataAtual->format('m');
    $anoAnterior = (int)$dataAtual->format('Y') - 1;

    // Começa do 1º dia do mês no ano anterior
    $inicio = new DateTime("$anoAnterior-$mes-01");

    // Avança até o primeiro dia da semana igual
    while ($inicio->format('N') != $diaSemanaAtual) {
        $inicio->modify('+1 day');
    }

    // Soma (ordem-1) semanas para chegar na mesma ocorrência
    $inicio->modify('+' . ($ordem - 1) . ' weeks');

    return $inicio->format('Y-d-m');
}






//converter data para sql server
    public function dataSql($data = 0){

        if($data == 0) {
            //buscar ano atual
            $anoAtual = date('Y');
            //dia atual
            $dia = date('d');
            //mes atual
            $mes = date('m');
        }else{
            $anoAtual = substr($data, 0, 4);
            $dia = substr($data, 8, 2);
            $mes = substr($data, 5, 2);
        }

        //montando data anterior
        $dataAnterior = $anoAtual.'-'.$dia.'-'.$mes;

        //retorando uma string da data anterior
        return $dataAnterior;
    }




//quantidade de meses entre duas datas
public  function  mesesEntreDatas($datainicio,$datafinal){
       $data1 = DateTime::createFromFormat('Y-m-d', $datainicio);
    $data2 = DateTime::createFromFormat('Y-m-d', $datafinal);

    // Verificação de erro
    if (!$data1 || !$data2) {
        throw new Exception("Data inválida.");
    }

    $data1->modify('first day of this month');
    $data2->modify('first day of this month');

    $meses = 0;

    while ($data1 <= $data2) {
        $meses++;
        $data1->modify('+1 month');
    }

    return $meses;



}

public function diasRestantes()
{
        $ultimoDiaDoMes = date("t");  // Obtém o último dia do mês atual
        $hoje = date("j");  // Obtém o dia do mês atual
    
        $diasRestantes = $ultimoDiaDoMes - $hoje;
    
        return $diasRestantes;
    }


public function formatarDataPtbr($dataOriginal)
{
    $dataSemMilissegundos = substr($dataOriginal, 0, 19);

    // Convertendo para um objeto DateTime
    $data = DateTime::createFromFormat('Y-m-d H:i:s', $dataSemMilissegundos);
    
    // Formatando no estilo PT-BR
    $dataFormatada = $data->format('d/m/Y');

    return $dataFormatada;
}


public function converterDataEmString($dataOriginal){


// Converte para objeto DateTime com formato brasileiro (d/m/Y H:i:s)
$data = DateTime::createFromFormat('d/m/Y H:i:s', $dataOriginal);

// Formata no padrão desejado (Ymd)
$dataFormatada = $data->format('Ymd');

return $dataFormatada; // Saída: 20250520
}



}