Trabalhando com datas em PHP
Sintaxe da Função date:
string = date(string formato,int [data e hora em timestamp]);
no primeiro parâmetro string formato existe as seguintes opções :
d = dia no formato numérico de ex: "01" a "31".
D = as 03 letras do dia textual ex: "fri"
F = mês textual ex: "january"
m = mês no formato "00" a "12"
Y = no no formato 2003
y = ano no formato 03
h = hora no formato "00" a "12"
H = hora no formato de "00" a "23"
i = minutos
s = segundos
Apartir destes dados você poderá facilmente mostrar a data e hora atual da seguinte forma:
Bom isto você mostra a data e hora atual mas se você por exemplo precisar trabalhar com uma data que não seja atual a passagem do segundo parametro se faz necessaria sendo que este parâmetro tem que ser no formato timestamp que nada mais é do que a quantidade de segundos passados desde meia-noite de 1970.
O PHP tem algumas funções de gerar timestamp para nós uma delas é time().
Sintaxe : int time();
Isto que dará o número de segundos passados 1970 até o momento atual.
Outra função para gerar o timestamp é o mktime();
Sintaxe : int mktime(int hora,int minuto,int segundo,int mês,int dia ,int ano);
Exemplo
Bom agora que já conhecemos todas as funções, vamos a um pequeno exemplo pratico:
string = date(string formato,int [data e hora em timestamp]);
no primeiro parâmetro string formato existe as seguintes opções :
d = dia no formato numérico de ex: "01" a "31".
D = as 03 letras do dia textual ex: "fri"
F = mês textual ex: "january"
m = mês no formato "00" a "12"
Y = no no formato 2003
y = ano no formato 03
h = hora no formato "00" a "12"
H = hora no formato de "00" a "23"
i = minutos
s = segundos
Apartir destes dados você poderá facilmente mostrar a data e hora atual da seguinte forma:
<?php Echo "hora atual date('d-m-Y h:i')"; ?>
Bom isto você mostra a data e hora atual mas se você por exemplo precisar trabalhar com uma data que não seja atual a passagem do segundo parametro se faz necessaria sendo que este parâmetro tem que ser no formato timestamp que nada mais é do que a quantidade de segundos passados desde meia-noite de 1970.
O PHP tem algumas funções de gerar timestamp para nós uma delas é time().
Sintaxe : int time();
Isto que dará o número de segundos passados 1970 até o momento atual.
Outra função para gerar o timestamp é o mktime();
Sintaxe : int mktime(int hora,int minuto,int segundo,int mês,int dia ,int ano);
Exemplo
<?php $dia = 25; $mês = 12; $ano = 2003; $ts= mktime($hora,$min,$seg,$mês,$dia,$ano); echo $ts; // isto gerou o time timestamp date ('d-m-Y',$ts); // isso deverar imprimir 25-12-2003. ?>
Bom agora que já conhecemos todas as funções, vamos a um pequeno exemplo pratico:
<?php echo "Data e Hora : ".date('d-m-Y H:i'); $dia = 25 ; // pega o dia de natal $mes = 12 ; // pega o mes $ano = date('y'); // o ano $dia_atual = date('d'); // pega dia atual $mes_atual = date('m'); // pega o mes atual $ts = mktime($hora,$min,$seg,$mes - $mes_atual,$dia - $dia_atual,$ano); echo "Falta ".date('m',$ts)." meses"." e ".date('d',$ts)." dias"." para o natal"." , Boas Compras hohoho..."; // Bom isto foi a subtração. agora vamos imaginar que estamos construindo uma loja virtual // e determinado produto ou serviço pode ser pago em três parcelas, ou seja, 30,60,90 dias // e vc precisa gerar os boletos com as repectivas datas. $dia_da_compra = date('d'); $mes_da_compra = date('m'); $ano_da_compra = date('Y'); $parcela = 30; // primeira parcela daqui a 30 dias for ($cont = 1 ; $cont <= 3; $cont++) { $ts = mktime($hora,$min,$seg,$mes_da_compra,$dia_da_compra + $parcela,$ano); echo "Data de Pagamento da $cont ° parcela : ".date('d-m-Y',$ts)."<br>"; $parcela = $parcela + 30; } ?>
Olá Show..
Pelo que eu sei todas as formas de negócio, tanto no comércio como no mercado de ações, é tudo 30 dias..
Para a parte comercial não existe 31 dias nem 28 ou 29 somente 30 dias.. por isso o sistema vai pegar 30 dias.
Acho que é isso se estiver errado por favor me corrijam.
Abraços
Doniani
Pelo que eu sei todas as formas de negócio, tanto no comércio como no mercado de ações, é tudo 30 dias..
Para a parte comercial não existe 31 dias nem 28 ou 29 somente 30 dias.. por isso o sistema vai pegar 30 dias.
Acho que é isso se estiver errado por favor me corrijam.
Abraços
Doniani
22/02/2006 3:24pm
(~19 anos atrás)
Amigo, este script é perfeito..
Minha única dúvida é no trecho abaixo:
$dia_da_compra = date('d');
$mes_da_compra = date('m');
$ano_da_compra = date('Y');
$parcela = 30; // primeira parcela daqui a 30 dias
for ($cont = 1 ; $cont <= 3; $cont++) {
$ts = mktime($hora,$min,$seg,$mes_da_compra,$dia_da_compra + $parcela,$ano);
echo "Data de Pagamento da $cont ° parcela : ".date('d-m-Y',$ts)."<br>";
$parcela = $parcela + 30;
}
?>
Funciona certinho o único problema é que ele não gera as futuras faturas com intervalo de 30, 31 dias ou seja mes 31 ele considera como 30 e sempre vai caindo um dia por mes!
Como considerar isto e também o mes de fevereiro que pode ser 28 ou 29 dias! Exemplo eu quero todas as futuras faturas no dia 1 de cada mes!
Minha única dúvida é no trecho abaixo:
$dia_da_compra = date('d');
$mes_da_compra = date('m');
$ano_da_compra = date('Y');
$parcela = 30; // primeira parcela daqui a 30 dias
for ($cont = 1 ; $cont <= 3; $cont++) {
$ts = mktime($hora,$min,$seg,$mes_da_compra,$dia_da_compra + $parcela,$ano);
echo "Data de Pagamento da $cont ° parcela : ".date('d-m-Y',$ts)."<br>";
$parcela = $parcela + 30;
}
?>
Funciona certinho o único problema é que ele não gera as futuras faturas com intervalo de 30, 31 dias ou seja mes 31 ele considera como 30 e sempre vai caindo um dia por mes!
Como considerar isto e também o mes de fevereiro que pode ser 28 ou 29 dias! Exemplo eu quero todas as futuras faturas no dia 1 de cada mes!
16/01/2006 4:03pm
(~19 anos atrás)
E tem gente que ainda não acha valor na internet...Resolveu minha vida esse script!!!
05/10/2005 4:09pm
(~19 anos atrás)
Colocando a data no formato para insercao no banco interbase/firebird/mysql:
Resolvido:
Com ajuda dos amigos:
Primeiro eu pego a data do form chamo a funcao converteData que transformará para data do banco interbase assim como: 2004-Nov-28
agora quando o usario entra com a data no form 28/11/2004 a funcao transforma na data para o banco interbase ou firebird e mysql, armazenando realmente a data digitada no form 28/11/2004.
antes ele invertia na hora de inserir no banco ficando 11/28/2004 só que nem chegava de armazenar dava um erro.
sigua os passos abaixo:
<?
$thisDATANASCIMENTO = converteData($thisDATANASCIMENTO);
function converteData($data){
if ($data == "")
return "";
if (substr($data,3,2) == "01"){
$mes = "Jan";
};
if (substr($data,3,2) == "02"){
$mes = "Feb";
};
if (substr($data,3,2) == "03"){
$mes = "Mar";
};
if (substr($data,3,2) == "04"){
$mes = "Apr";
};
if (substr($data,3,2) == "05"){
$mes = "May";
};
if (substr($data,3,2) == "06"){
$mes = "Jun";
};
if (substr($data,3,2) == "07"){
$mes = "Jul";
};
if (substr($data,3,2) == "08"){
$mes = "Aug";
};
if (substr($data,3,2) == "09"){
$mes = "Sep";
};
if (substr($data,3,2) == "10"){
$mes = "Oct";
};
if (substr($data,3,2) == "11"){
$mes = "Nov";
};
if (substr($data,3,2) == "12"){
$mes = "Dec";
};
$diavenc = substr($data,0,2);
$mesvenc = $mes;
$anovenc = substr($data,6,4);
$dataConvertida = $anovenc."-".$mesvenc."-".$diavenc;
return $dataConvertida;
}
?>
Resolvido:
Com ajuda dos amigos:
Primeiro eu pego a data do form chamo a funcao converteData que transformará para data do banco interbase assim como: 2004-Nov-28
agora quando o usario entra com a data no form 28/11/2004 a funcao transforma na data para o banco interbase ou firebird e mysql, armazenando realmente a data digitada no form 28/11/2004.
antes ele invertia na hora de inserir no banco ficando 11/28/2004 só que nem chegava de armazenar dava um erro.
sigua os passos abaixo:
<?
$thisDATANASCIMENTO = converteData($thisDATANASCIMENTO);
function converteData($data){
if ($data == "")
return "";
if (substr($data,3,2) == "01"){
$mes = "Jan";
};
if (substr($data,3,2) == "02"){
$mes = "Feb";
};
if (substr($data,3,2) == "03"){
$mes = "Mar";
};
if (substr($data,3,2) == "04"){
$mes = "Apr";
};
if (substr($data,3,2) == "05"){
$mes = "May";
};
if (substr($data,3,2) == "06"){
$mes = "Jun";
};
if (substr($data,3,2) == "07"){
$mes = "Jul";
};
if (substr($data,3,2) == "08"){
$mes = "Aug";
};
if (substr($data,3,2) == "09"){
$mes = "Sep";
};
if (substr($data,3,2) == "10"){
$mes = "Oct";
};
if (substr($data,3,2) == "11"){
$mes = "Nov";
};
if (substr($data,3,2) == "12"){
$mes = "Dec";
};
$diavenc = substr($data,0,2);
$mesvenc = $mes;
$anovenc = substr($data,6,4);
$dataConvertida = $anovenc."-".$mesvenc."-".$diavenc;
return $dataConvertida;
}
?>
07/12/2004 8:59am
(~20 anos atrás)
Segundo manual do php e várias outras referências pela web, seria possível obter os nomes dos dias da semana e dos meses em Português, ajustando o setlocale. Pelo0 q pesquisei, bastaria usar: setlocale(LC_ALL,"pt_BR"); //Linux
ou
setlocale(LC_CTYPE,"Portuguese Brazil");//Windows
Então nos comandos de data, onde a formatação fosse 'D' ou 'F', teríamos os nomes em Português.
Testei das 2 formas aqui no WinXP+Apache+PHP3.2, mas não consegui fazer funcionar. Algúem sabe o caminho das pedras?
ou
setlocale(LC_CTYPE,"Portuguese Brazil");//Windows
Então nos comandos de data, onde a formatação fosse 'D' ou 'F', teríamos os nomes em Português.
Testei das 2 formas aqui no WinXP+Apache+PHP3.2, mas não consegui fazer funcionar. Algúem sabe o caminho das pedras?
01/12/2003 12:21am
(~21 anos atrás)
Obrigado, sua observação esta correta. deve ter sido algum problema na hora da formatação do texto pois tb não é Echo e sim echo.sempre lembrando que o php é case sensitive por isso echo != Echo.Bom espero que estes problemas não esteja causando grandes dificuldade mais qualquer duvida sobre este artigo pode entrar em contato comigo.
01/11/2003 8:39pm
(~21 anos atrás)
Como o Diogo disse esse tipo de artigo é muito importante.
mas o meu comentário é sobre o seguinte ..
<?php
Echo "hora atual date('d-m-Y h:i')";
?>
a funcao deve esta fora das aspas pra ser reconhecida como função. ai vai uma sugestão ;)
<?php
echo "hora atual: ".date("d-m-Y h:i");
?>
como sabemos o " . " ponto é o operador dse concatenacao.
mas o meu comentário é sobre o seguinte ..
<?php
Echo "hora atual date('d-m-Y h:i')";
?>
a funcao deve esta fora das aspas pra ser reconhecida como função. ai vai uma sugestão ;)
<?php
echo "hora atual: ".date("d-m-Y h:i");
?>
como sabemos o " . " ponto é o operador dse concatenacao.
01/11/2003 8:28pm
(~21 anos atrás)
Artigos como esse são importantes por apresentarem aos mais iniciantes as facilidades, alé de desintupirem os fóruns com perguntas repetitivas, que poderiam ser resolvidas com um pesquisar. Mas é assim mesm, eu também já fui um iniciante, ainda sou, mas já iniciado, hehehe.
28/10/2003 6:55pm
(~21 anos atrás)
aqui vai um algoritmo para vc gerar essas datas... blz
ta em delphi.. mas a lógica é simples
a variavel (a) seria a data do primeiro pagamento!!!
e depois é so chamar a função dentro de um loop contendo a quantidade de pagamentos!
function datavencimento(a:tdate):string;
var
d,m,y:word;
begin
decodedate (a,y,m,d);
inc(m);
if m>12 then
begin
m:=1;
inc(y);
end;
datavencimento:=ds+'/'+ms+'/'+currtostr(y);
end;