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.