Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera,
Estou numa difícil, ao menos pra mim, que sou autoditada e há situação que nunca enfrentei como esta a seguir:
Preciso contar, diariamente, quandos dias se passaram de uma assinatura de 30 dias em um site e mudar o status de 1 para 0, quando chegar aos 30 dias, bloqueando o autor.
Fiz a seguinte tabela:
id - autor - prazo - data_i - data_f - status
onde
prazo é 30,
data_i é o início
data_f é o final.
E fiz esse código, para acompanhar o passar dos dias:
$prazo = 30;
$data_i = $data_i + 1;
$dias = $data_f - time('Y-m-d h:i:s');
$prazo - $dias;
echo $dias;
echo dá 1359462523, número que aumenta toda vez que atualizo!!!
O que esta burrice me pessoa fez?
Qual é a solução?
Socorro!
Nesse link, há uma abrangente explicação do que você precisa:
http://forum.imasters.com.br/topic/464950-desativar-cliente-depois-de-1-mes/
dochipis, substitua as funções date pela biblioteca DateTime, é o recomendado,
>
Nesse link, há uma abrangente explicação do que você precisa:
http://forum.imasters.com.br/topic/464950-desativar-cliente-depois-de-1-mes/
dochipis, substitua as funções date pela biblioteca DateTime, é o recomendado,
Gravei na tabela data_i 2012-12-26 06:13:03.
Portanto, a assinatura de 30 dias está vencida.
Mas, ao fazer a consulta com o código reproduzido abaixo, a resposta é assinatura em vigor.
Onde está o erro, por favor?
<?php
include("config.php");
$id = $_GET['id'];
$seleciona = mysql_query("SELECT * FROM pagamentos WHERE id = '$id'");
while($res_id = mysql_fetch_array($seleciona)){
$id = $res_id['id'];
$data_i = $res_id['data_i'];
}
if('$data_i + INTERVAL 1 MONTH <= CURRENT_DATE'){
echo "Assinatura em vigor";
}else{
echo "Assinatura vencida";
}
?>esse código:
'$data_i + INTERVAL 1 MONTH <= CURRENT_DATE' É SQL e não PHP. Se desejas fazer no PHP, faça da seguinte forma:
$dataAssinatura = new DateTime($res_id['data_i']);
//new DateTime() indica o dia atual.
$intervalo = $dataAssinatura->diff(new DateTime());
//margem de erro de 1 minuto
$diasRestantes = $intervalo->days + (($intervalo->h) / 24) + (($intervalo->i) / 60 / 24);
if($diasRestantes <= 30) {
echo 'assinatura em vigor'; echo 'assinatura em vencida';
}
Você possuirá uma margem de erro menor que um minuto. No caso, o usuário ficará ativo por 30 dias e 59 segundos. O que eu acho aceitável.
>
esse código:
'$data_i + INTERVAL 1 MONTH <= CURRENT_DATE' É SQL e não PHP. Se desejas fazer no PHP, faça da seguinte forma:
$dataAssinatura = new DateTime($res_id['data_i']);
//new DateTime() indica o dia atual.
$intervalo = $dataAssinatura->diff(new DateTime());
//margem de erro de 1 minuto
$diasRestantes = $intervalo->days + (($intervalo->h) / 24) + (($intervalo->i) / 60 / 24);
if($diasRestantes <= 30) {
echo 'assinatura em vigor'; echo 'assinatura em vencida';
}
Você possuirá uma margem de erro menor que um minuto. No caso, o usuário ficará ativo por 30 dias e 59 segundos. O que eu acho aceitável.
Funcionou perfeitamente! Obrigado! E sucesso!
PHP - Somar ou Subtrair dias de uma data