PHP:
Strings, Datas e Horas
Programação de Servidores
Marx Gomes Van der Linden
Manipulação de Strings

PHP define diversas funções úteis para a
manipulação de strings.


Além de um suporte a expressões regulares.
Algumas dessas funções já foram vistas:

implode / explode

str_split

htmlentities / strip_tags

trim
http://marx.vanderlinden.com.br/
2
printf


PHP fornece a função printf, semelhante à
equivalente em C, que fornece maneiras mais
precisas de imprimir strings complexas,
principalmente contendo números.
Sintaxe:

printf($string, $par1, $par2,
$par3...)
http://marx.vanderlinden.com.br/
3
printf

printf lida com interpolação através de
caracteres especiais, que são substituídos
pelos respectivos parâmetros:

%d → Número inteiro

%f → Número real

%b → Inteiro, exibido como binário

%o → Inteiro, exibido como octal

%x %X → Inteiro, exibido como hexadecimal

%s → String
http://marx.vanderlinden.com.br/
4
Exemplo
printf("Real formatado: %.2f<br>\n", 3.2);
printf("Inteiro: (%5d)<br>\n", 18);
printf("Sinais: %+d, %+d<br>\n", -15, 15);
printf("Hexa: %06x, %06X<br>\n", 500, 500);
Real formatado: 3.20<br>
Inteiro: (
18)<br>
Sinais: -15, +15<br>
Hexa: 0001f4, 0001F4<br>
http://marx.vanderlinden.com.br/
5
sprintf


A função sprintf funciona exatamente como
printf, mas retorna o valor como uma string,
ao invés de exibir na tela.
Exemplo:
$x = sprintf("%.2f", 3.2);
echo "Preço: R\$ $x";

Saída:
Preço: R$ 3.20
http://marx.vanderlinden.com.br/
6
substr


A função substr retorna uma parte de uma
string.
Sintaxe:
 substr($string, $inicio,
[$tamanho])


Se $tamanho for omitido, considera-se toda
a string.
Se $início for negativo, conta-se a partir
do final da string.
http://marx.vanderlinden.com.br/
7
substr
echo
echo
echo
echo
echo
substr("abcdef",
substr("abcdef",
substr("abcdef",
substr("abcdef",
substr("abcdef",
3, 2), "\n";
3), "\n";
-1), "\n";
-2), "\n";
-3, 1), "\n";
http://marx.vanderlinden.com.br/
de
def
f
ef
d
8
strpos, strrpos

strpos($string, $substring)


strrpos($string, $substring)


Encontra a primeira posição de substring em
$string.
Encontra a última posição de substring em $string.
Ambas retornam false, se a substring não for
encontrada.
http://marx.vanderlinden.com.br/
9
strpos, strrpos
$texto = 'abc abcd bcde';
echo strpos($texto, 'bcd'), ', ',
strrpos($texto, 'bcd');

Saída:
5, 9
http://marx.vanderlinden.com.br/
10
str_replace

str_replace($busca, $novo, $string)


Substitui todas as ocorrências de $busca por $novo
em $string.
Tanto $busca como $novo podem ser arrays
http://marx.vanderlinden.com.br/
11
str_replace
$texto = 'Lista de animais: Cachorro, Gato e
Papagaio.';
$texto2 = str_replace('animais', 'vegetais',
$texto);
$texto3 = str_replace(
array('Cachorro', 'Gato', 'Papagaio'),
array('Alface', 'Cenoura', 'Tomate'),
$texto2 );
echo "$texto<br>\n$texto2<br>\n$texto3<br>";
http://marx.vanderlinden.com.br/
12
str_replace

Saída:
Lista de animais: Cachorro, Gato e
Papagaio.<br>
Lista de vegetais: Cachorro, Gato e
Papagaio.<br>
Lista de vegetais: Alface, Cenoura e
Tomate.<br>
http://marx.vanderlinden.com.br/
13
Datas e Horas

O uso e manipulação de datas e horas é
importante em quase todos os aspectos que
envolvem programação para web:





Organizar dados cronologicamente
Agendar eventos
Verificar a última vez que um usuário se
conectou
Lidar com informações como data de envio e
recebimento de um produto em uma loja
virtual
http://marx.vanderlinden.com.br/
14
Expiração de cookies
Datas e Horas

Ao contrário de dados simples como strings e
números, uma data/hora pode ser composta de
um conjunto de informações variável e
potencialmente grande:







Hora
Minuto
Segundo
Dia do Mês
Dia da Semana
Mês
http://marx.vanderlinden.com.br/
Ano
15
Datas e Horas

Cálculos com datas e horas também não são
triviais.

Horas, minutos e segundos variam de 0 a 59.

O número de dias em um mês é variável.


Quanto é 12h50min + 843min?
Quantos seguindos se passaram desde
18/05/2005, 8h45?
http://marx.vanderlinden.com.br/
16
Timestamp Unix


Sistemas baseados em Unix, como o Linux,
utilizam um mecanismo padronizado para se
contar o tempo.
Um instante de tempo em Unix é armazena-se
um número inteiro (positivo ou negativo)
chamado timestamp.


Tipicamente, o timestamp é armazenado em 4
bytes (32 bits).
Este também é o sistema adotado por PHP,
independentemente da plataforma.
http://marx.vanderlinden.com.br/
17
A Época Unix

O timestamp Unix correspondente ao número
de segundos passados desde o início da
Época Unix ou Era Unix (Epoch).
00:00:00, 1 de Janeiro de 1970 (UTC)
UTC → Zona temporal precisamente definida,
aproximadamente equivalente a GMT
(Greenwich).


http://marx.vanderlinden.com.br/
18
time()

A função time retorna o número de segundos
passados desde a época (timestamp atual).
echo time();
1221689189
http://marx.vanderlinden.com.br/
19
strftime


A função strftime converte um inteiro em
uma data legível.
Sintaxe:
 strftime($formato, [$tempo])

Se $tempo for omitido, é utilizado o
momento atual (time())
http://marx.vanderlinden.com.br/
20
Formato (strftime)

%a - Nome da semana abreviado

%A - Nome da semana completo

%b - Nome do mês abreviado

%B - Nome do mês completo

%c - Representação da data e hora preferida

%d - Dia do mês como um número decimal (de
01 até 31)

%y - Ano com 2 dígitos

%Y - Ano com 4http://marx.vanderlinden.com.br/
dígitos
21
Formato (strftime)


%H - Hora como um número decimal usando
um relógio de 24-horas (de 00 até 23)
%I - Hora como um número decimal usando
um relógio de 12-horas (de 01 até 12)

%m - Mês como número decimal (de 01 até 12)

%M - Minuto como número decimal

%r - Hora em notação a.m. e p.m.

%R - Hora em notação de 24 horas

%S - Segundo como um número decimal

%T - Hora corrente, igual a %H:%M:%S
http://marx.vanderlinden.com.br/
22
strftime
echo strftime("%c<br>\n") ;
echo strftime(
"Hoje é %A, dia %d de %B de %G.<br>\n"
);
echo strftime("São %Hh%M (%T)<br>\n");
Wed Sep 17 22:32:04 2008<br>
Hoje é Wednesday, dia 17 de September de
2008.<br>
São 22h32 (22:32:04)<br>
http://marx.vanderlinden.com.br/
23
setlocale



A função setlocale orienta o PHP a usar
configurações locais para a formatação de
vários tipos de dados, entre eles os de data e
hora.
Cada localização está associada a uma string,
cujo formato depende do sistema operacional.
O sucesso da função depende de
configurações do sistema operacional.
http://marx.vanderlinden.com.br/
24
setlocale


Sintaxe:
setlocale(TIPO, $locale1,
[$locale2], [locale3]...)


TIPO é uma constante que define que tipo
localização será afetada (para data e hora,
LC_TIME)
Podem-se especificar várias localizações,
que serão tentadas em ordem de prioridade
http://marx.vanderlinden.com.br/
25
setlocale
setlocale(LC_TIME, 'pt_BR');
echo strftime("%c<br>\n") ;
echo strftime(
"Hoje é %A, dia %d de %B de %G.<br>\n"
);
echo strftime("São %Hh%M (%T)<br>\n");
Qua 17 Set 2008 22:41:46 BRT<br>
Hoje é quarta, dia 17 de setembro de
2008.<br>
São 22h41 (22:41:46)<br>
http://marx.vanderlinden.com.br/
26
$eventos = array(
"Pré-história" => (-pow(2,32)/2),
"Início da época" => 0,
"Festa" => 1000000000,
"Próxima festa" => 2000000000,
"Fim dos tempos" => (pow(2,32)/2-1) );
setlocale(LC_TIME, 'pt_BR');
echo "<table><tr> <th>Evento</th>
<th>Data</th> <th>Tempo Unix</th> </tr>\n";
foreach($eventos as $evento => $data){
echo strftime("<tr> <td>$evento</td>
<td>%d/%b/%Y, %T</td> <td>$data</td> </tr>\n",
$data);
}
27
echo "</table>"; http://marx.vanderlinden.com.br/
Datas Importantes
http://marx.vanderlinden.com.br/
28
getdate



A função getdate retorna as informações de
um timestamp como um array associativo.
Sintaxe:
getdate([$timestamp])

Se omitido, é usado o timestamp do momento
atual.
http://marx.vanderlinden.com.br/
29
getdate

Campos do array retornado:

"seconds" Segundos

"minutes" Minutos

"hours"
Horas

"mday"
Dia do mês

"wday"
Dia da semana (número)

"mon"
Mês (número)

"year"
Ano

"yday"
Dia do ano

"weekday" Dia da semana (nome)

"month"
http://marx.vanderlinden.com.br/
Mês (nome)
30
getdate
$ts = mktime(12,30,12, 3,19,2005);
$data = getdate($ts);
echo "$data[hours] horas e $data[minutes]
minutos, ano $data[year].";
12 horas e 30 minutos, ano 2005.
http://marx.vanderlinden.com.br/
31
mktime



A função mktime faz o reverso de strftime e
getdate, isto é, construi um timestamp
baseado em informações fornecidas de data e
hora.
Sintaxe:
mktime ([$hora], [$minuto],
[$segundo] [$mês], [$dia], [$ano])

Os argumentos não fornecidos são definidos para o
valor da data/hora atual.
http://marx.vanderlinden.com.br/
32
mktime
$ts = mktime(12,30,12, 3,18,2010);
echo strftime("O timestamp $ts equivale a
%d/%b/%Y, %T", $ts);
O timestamp 1268926212 equivale a
18/Mar/2010, 12:30:12
http://marx.vanderlinden.com.br/
33
Manipulando o timestamp

Sabendo que o timestamp é simplesmente um
número inteiro medido em segundos, é
possível manipulá-lo diretamente.
http://marx.vanderlinden.com.br/
34
Manipulando o timestamp
$a = mktime(12,30,12, 3,19,2005);
$b = $a + 60*60; // + 1 hora
$c = $b + 60*60*24; // + 1 dia
foreach( array($a,$b,$c) as $t)
echo strftime("%d/%b/%Y, %T<br>\n", $t);
19/Mar/2005, 12:30:12<br>
19/Mar/2005, 13:30:12<br>
20/Mar/2005, 13:30:12<br>
http://marx.vanderlinden.com.br/
35
strtotime



A função strtotime fornece uma maneira
mais fácil e poderosa de se executarem
operações de adição e subtração em
timestamps.
Sintaxe:
strtotime($frase, [$referência])


$frase é uma expressão em inglês padronizada
$referência é o timestamp ao qual será
adicionado ou subtraído o tempo
http://marx.vanderlinden.com.br/
36
Sintaxe da Frase



A frase usada no primeiro parâmetro de
strtotime pode ser do tipo:
+ ou - seguido do tempo a ser modificado:

"+1 day"

"-3 days"

"+1 week 2 days 4 hours 2 seconds"
next ou last seguido de um dia da semana:

"next Thursday"

"last Monday"
http://marx.vanderlinden.com.br/
37
Sintaxe da Frase

Não altera a data


"now" → Usado sem o segundo argumento
Data absoluta:

"10 September 2000"
http://marx.vanderlinden.com.br/
38
Exemplo
$a =
$b =
$c =
$b);
$d =
$e =
mktime(12,30,12, 3,19,2005);
strtotime("+1 day", $a);
strtotime("+2 weeks 8 hour 20 minutes",
strtotime("next Thursday", $c);
strtotime("last Saturday", $d);
foreach( array($a,$b,$c,$d,$e) as $t)
echo strftime("%d/%b/%Y, %T<br>\n", $t);
19/Mar/2005,
20/Mar/2005,
03/Apr/2005,
07/Apr/2005,
02/Apr/2005,
12:30:12<br>
12:30:12<br>
20:50:12<br>
00:00:00<br>
http://marx.vanderlinden.com.br/
00:00:00<br>
39
Download

12 - PHP: Strings, Datas e Horas