Bora ajudar o programador a transformar café em código?

A Unix Timestamp e Calculando Segundos com a função mktime()

Neste tutorial de nossa apostila de PHP, vamos aprender o que é a famosa Unix Timestamp bem como vamos aprender a calcular segundos a partir dela com a função mktime.

A Unix Timestamp - A Marca Temporal Universal

Imagine que seu chefe te peça um serviço web onde o usuário digita duas datas completas, com dia, mês, ano e horário, e você tenha que dizer o tempo entre as duas.

Por exemplo:

  • 5 de abril, 2015, 18h45min e 34s
  • 4 de novembro, 1987, 19h00min e 12s


Seria um trabalho altamente maçante e chato de fazer, não concorda?
A solução para isso é simples:
O primeiro passo é definir uma marca temporal, é a do Unix, a timestamp, e ela é a data 1 de janeiro de 1970, as 00:00:00 UTC (Coordinated Universal Time).

Depois, basta calcular quantos segundos ocorreram desde a timestamp até hoje e lidar apenas com esse número, fica mais fácil trabalhar com essa formalização.

A função mktime()

A função mktime() recebe a data completa e retorna os segundos transcorridos desde a marca temporal do Unix, sua sintaxe é:
int mktime(int hora, int minuto, int segundos, int mes, int dia, int ano);

Vamos usar nossos exemplos:
5 de abril, 2015, 18h45min e 34s: echo mktime(18, 45, 34, 4, 5, 2015)
Retorna: 1428270334

4 de novembro, 1987, 19h00min e 12s: echo mktime(19,0,12,11,4,1987)
Retorna: 563058012

Diferença temporal: 1428270334 - 563058012 = 865212322s
A partir daí fica mais fácil trabalhar e transformar em minutos, horas, dias...

Exercício com a mktime()

Crie um script que pede o dia, mês, ano e horário de nascimento de uma pessoa e exiba quantos segundos se passaram da timesamp do Unix até a data de nascimento dela.
<html>
 <head>
  <title>Apostila PHP Progressivo</title>
 </head>
 <body>
 <form action="" method="get">
  Dia<input type="text" name="day" /><br />
  Mês<input type="text" name="month" /><br />
  Ano<input type="text" name="year" /><br />
  Hora<input type="text" name="hour" /><br />
  Minuto<input type="text" name="min" /><br />
  Segundo<input type="text" name="sec" /><br />
  <input type="submit" name="submit" value="Testar" />
 </form> 
 <?php
  $dia = $_GET['day'];
  $mes = $_GET['month'];
  $ano = $_GET['year'];
  $hora = $_GET['hour'];
  $minuto = $_GET['min'];
  $segundo = $_GET['sec'];
  
  echo "Se passaram: ".mktime($hora,$minuto,$segundo,$mes,$dia,$ano)."
        segundos desde que você nasceu";
  
 ?>
 </body>
</html>

Exercício com a mktime()

Agora faça um script que peça a data de aniversário completa do usuário e calcule o tanto de segundos que ele viveu.
Dica: use os parâmetros da função Date()

Solução na apostila.

Veja também

O melhor PC para programar

O melhor celular para programar