DatasHoras

Download do Código
indexHoras.php (Apenas Leitura)
<?php 
require_once("utilsDataHora.php"); 

	$horaSelecionada = ''; 
	if (isset($_GET['horaCalendario']))
		$horaSelecionada = $_GET['horaCalendario']; 
?>

<!DOCTYPE html>
<html lang="pt-br">
	<head>
		<meta charset="utf-8">
		<title>Horas em PHP</title>
	</head>
	<body> 
		<form method="GET" name="formularioHr">
			<label for  = "horaCalendario">Escolha uma hora:</label>
			<!-- O type = "time" captura a hora no formato HH:MM -->
			<input type = "time" id="horaCalendario" name="horaCalendario" value="<?php echo $horaSelecionada; ?>" onchange="formularioHr.submit()" required >
		</form>
	</body>
</html> 

<?php 
if ($horaSelecionada != '') {
    // Transforma a hora (HH:MM) em um número Timestamp usando o dia de hoje
    $timestamp = strtotime($horaSelecionada); 
    
    echo "<h3>Resultados:</h3>";
    echo "Hora: "		. hora($timestamp)				. "<br>";
    echo "Minuto: "		. minuto($timestamp)			. "<br>";
    echo "Segundo: "	. segundo($timestamp)			. "<br>";
    echo "Formatada: "	. horaFormatada($timestamp)		. "<br>";
}
?>
indexDatas.php (Apenas Leitura)
<?php 
	require_once("utilsDataHora.php");
	$dataSelecionada = '';
	if (isset($_GET['dataCalendario']))
		$dataSelecionada = $_GET['dataCalendario'];
?>

<!DOCTYPE html>
<html lang="pt-br">
	<head>
		<meta charset="utf-8">
		<title>Datas em PHP</title>
	</head>
	<body>
		<form method="GET" name="formularioDt">
			<label for = "dataCalendario">Escolha uma data para testar:</label>
			<input 	type     = "date"
					id       = "dataCalendario"
					name     = "dataCalendario"
					value    = "<?php echo $dataSelecionada; ?>"
					onchange = "formularioDt.submit()"
					required
			>
		</form>
	</body>
</html>
<?php

	if ($dataSelecionada != '') {
		$timestamp       = strtotime($dataSelecionada); // Transforma AAAA-MM-DD em TimeStamp
		
		echo "<h3>Resultados:</h3>";
		echo "Dia: "						. dia($timestamp)					. "<br>";
		echo "Mês: "						. mes($timestamp)					. "<br>";
		echo "Ano: "						. ano($timestamp)					. "<br>";
		echo "Formatada: "					. dataFormatada($timestamp) 		. "<br>";
		echo "Dia da Semana: "				. diaDaSemanaFormatada($timestamp)	. "<br>";
		echo "Primeiro dia do mês: "		. dataFormatada(iniMes($timestamp))	. "<br>";
		echo "Último dia do mês: "			. dataFormatada(fimMes($timestamp))	. "<br>";
		echo "Diferença de Hoje em dias: "	. dataDif(hoje(), $timestamp, 'D')	. "<br>";
		echo "Diferença de Hoje em meses: "	. dataDif(hoje(), $timestamp, 'M')	. "<br>";
		echo "Diferença de Hoje em anos: "	. dataDif(hoje(), $timestamp, 'Y')	. "<br>";
	}
?>
utilsDataHora.php (Apenas Leitura)
<?php
date_default_timezone_set('America/Sao_Paulo');
/******************************************/
/************** Datas e Horas *************/
/******************************************/
function hoje(): int {
	return strtotime('today');
}

function agora(): int {
    return time();
}

function ano(int $timestamp): int {
    return (int) date('Y', $timestamp);
}

function mes(int $timestamp): int {
    return (int) date('m', $timestamp);
}

function dia(int $timestamp): int {
    return (int) date('d', $timestamp);
}

function hora(int $timestamp): int {
    return (int) date('H', $timestamp);
}

function minuto(int $timestamp): int {
    return (int) date('i', $timestamp);
}

function segundo(int $timestamp): int {
    return (int) date('s', $timestamp);
}

function dataDif(int $timestampInicial, int $timestampFinal, string $unidade = 'D'): int {
	$d1 = (new \DateTime())->setTimestamp($timestampInicial);
	$d2 = (new \DateTime())->setTimestamp($timestampFinal);
	$intervalo = $d1->diff($d2);

	return match (strtoupper($unidade)) {
		'Y' => $intervalo->y,
		'M' => ($intervalo->y * 12) + $intervalo->m,
		default => (int) $intervalo->days,
	};
}

function iniMes(int $timestamp): int {
    return strtotime(date('Y-m-01 00:00:00', $timestamp)); // primeiro dia do mês da data informada
}

function fimMes(int $timestamp): int {
    return strtotime(date('Y-m-t 23:59:59', $timestamp)); // (Timestamp) correspondente ao último dia do mês da data informada
}

function dataFormatada(int $timestamp, string $formato = 'd/m/Y'): string {
    return date($formato, $timestamp);
}

function horaFormatada(int $timestamp, string $formato = 'H:i:s'): string {
    return date($formato, $timestamp);
}

function diaDaSemana(int $timestamp): int { // 1 (Domingo) a 7 (Sábado)
    return (int) date('w', $timestamp) + 1;
}

function diaDaSemanaFormatada(int $timestamp): string {
    $dias = [
        1 => 'Domingo',
        2 => 'Segunda-feira',
        3 => 'Terça-feira',
        4 => 'Quarta-feira',
        5 => 'Quinta-feira',
        6 => 'Sexta-feira',
        7 => 'Sábado'
    ];
    return $dias[diaDaSemana($timestamp)]; // nome do dia da semana por extenso
}

?>
indexDataHora.php (Apenas Leitura)
<?php 
	require_once("utilsDataHora.php"); 

	$dataHoraSelecionada = ''; 
	if (isset($_GET['dataHoraCalendario'])) {
		$dataHoraSelecionada = $_GET['dataHoraCalendario']; 
	}
?> 
<!DOCTYPE html>
<html lang="pt-br">
	<head>
		<meta charset="utf-8">
		<title>Data e Hora Combinadas</title>
	</head>
	<body> 
		<form method="GET" name="formularioDtHr">
			<label for  = "dataHoraCalendario">Escolha Data e Hora:</label>
			<input type = "datetime-local" id="dataHoraCalendario" name="dataHoraCalendario" value="<?php echo $dataHoraSelecionada; ?>" onchange="formularioDtHr.submit()" required>
		</form>
	</body>
</html> 

	<?php 
	if ($dataHoraSelecionada != '') {
		// O HTML envia no formato "AAAA-MM-DDTHH:MM" (o "T" separa a data da hora)
		// O strtotime entende esse formato e gera o Timestamp
		$timestamp = strtotime($dataHoraSelecionada); 
		echo "<h3>Resultados:</h3>";
		echo "Data Formatada: "		. dataFormatada($timestamp)				. "<br>";
		echo "Hora Formatada: "		. horaFormatada($timestamp)				. "<br>";
		echo "Dia da Semana: "		. diaDaSemanaFormatada($timestamp)		. "<br>";
		echo "Dia: "				. dia($timestamp)						. "<br>";
		echo "Mês: "				. mes($timestamp)						. "<br>";
		echo "Ano: "				. ano($timestamp)						. "<br>";
		echo "Hora: "				. hora($timestamp)						. "<br>";
		echo "Minuto: "				. minuto($timestamp)					. "<br>";
	}
?>
Atualizar Visualização