Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola pessoal boa noite...
É o seguinte estou desenvolvendo um projeto que tem uns planos e cada plano suas funções..
Neste planos eles sera cobrado por horas de uso do sistema...
Porém quando eles adicionar um crédito que será um valor mínimo 25,00 reais
Este valor definir quantos dias sera
Por exemplo
Plano1
21,90 valido por 30 dias
R$: 0,0304 por hora
Plano2
40,00 valido por 30 dias
R$: 0, 556 por hora
E assim segue os demais planos
Caso o cliente queira mudar de plano será possível alterar o plano a qualquer momento de uma forma muito prática. Quando eles escolher um novo plano o sistema passará a ser cobrada automaticamente de hora em hora com o novo valor.
E quando estes créditos se acabarem ele dar um prazo no máximo de 7 dias úteis para q a empresa do cliente fica visível no sistema..
caso ele coloca novo crédito o sistema voltará mostrar a empresa..
Espero que possam ter conseguido entender o que eu digo...
>
2 horas atrás, Omar~ disse:
E qual a dúvida?
Bom, tudo questão de matemática, concentrando-se apenas nos cálculos do tempo de uso:
-
Valor atual menos valor da hora usada = resultado a atualizar em um banco de dados.
-
Valor atual é menor que tempo atual = fim do acesso a atualizar em um banco de dados.
-
O prazo de validade é simples data de adesão ao plano + 30 dias.
-
Acesso fora do prazo de validade conta como vencido.
21,90 / 0,0304 = se minha matemática de cabeça está correta é cerca de 720 horas o que equivale a 24 horas dia durante 30 dias.
Então não sei se acertei digamos 0,0304 / 60 = 0,00506 por minuto & 0,00506 / 60 = 0,000843 por segundo.
E é isso é melhor usar o sistema para calcular precisamente lembrando que aqui fiz de cabeça, então para cada segundo ou minuto ou hora que o usuário usar você desconta esse valor no total atual que ele possui seja 21,90 ou 10,00 ou 5,99 etc...
Você pode está usando o php para realizar os cálculos e atualizar os registros, porém em hora de uso você deve detectar esse tempo de atividade, se fosse eu optaria pelo https://socket.io/ para está constantemente realizando o cálculo no servidor e atualizando os descontos no crédito. Você pode até adicionar um intervalo em que o socket irá se comunicar caso esse sistema possa conter milhares de usuários simultaneamente, assim poupa estresse do servidor porém os registros podem ficar imprecisos caso o usuário saia antes da comunicação ser executada.
Ola Omar
Como posso fazer ela da forma correta
$Credito='21,90';// valor do crédito
$PrecoPorHora = 0,0304;// valor por hora
$dia='30'; //quantidade de dias
$ValorDisponível = 550;
// 5.5
$HoraDisponivel = ($ValorDisponível/$PrecoPorHora);
// 05:30:00 ~ Deve ter um jeito melhor
$HoraFormatada = sprintf("%02d:%02d:%02d",
A forma de calculo já disse como proceder, agora se for questão de recalcular a data em base do tempo de uso, o php já possui isso a mão pronto para uso:
$periodoA = date('Y-m-d H:i:s', strtotime('-1 minute'));
var_dump( $periodoA ); // resultado = sua data atual menos 1 minuto
echo "<hr />";
$periodoB = new DateTime('2022-12-27 17:55:00');
$periodoB->modify('-1 minute');
var_dump( $periodoB->format('Y-m-d H:i:s') ); // resultado = 2022-12-27 17:54:00>
Em 27/12/2022 at 13:27, Omar~ disse:
A forma de calculo já disse como proceder, agora se for questão de recalcular a data em base do tempo de uso, o php já possui isso a mão pronto para uso:
$periodoA = date('Y-m-d H:i:s', strtotime('-1 minute'));
var_dump( $periodoA ); // resultado = sua data atual menos 1 minuto
echo "<hr />";
$periodoB = new DateTime('2022-12-27 17:55:00');
$periodoB->modify('-1 minute');
var_dump( $periodoB->format('Y-m-d H:i:s') ); // resultado = 2022-12-27 17:54:00
Ola orma
Eu fiz aqui..
Preciso pegar quantidade de dias conforme for este plano....
Em dias úteis do crédito
So q não esta batendo o resultado esperado
Veja
<select id="calculo" onchange="calcular()">
<option value="" selected="">Selecione o tempo de uso</option>
<option value="1">1 minuto</option>
<option value="10">10 minutos</option>
<option value="60">60 minutos</option>
<option value="213">213 minutos</option>
</select>
<script>
var seletor = document.getElementById('calculo'); // apenas para fins de exemplo
seletor.selectedIndex = 0; // apenas para fins de exemplo
var saldoAtual = parseFloat(21.90);
var valorHora = parseFloat(0.0304);
// 60 minutos é 1 hora, então sabemos quanto vale um minuto
var valorMinuto = parseFloat(valorHora / 60);
console.log(
'Saldo atual: (' + saldoAtual + ')\n',
'Valor por hora: (' + valorHora + ')\n',
'Valor por minuto: (' + valorMinuto + ')\n'
);
function calcular() {
var minutosUsados = parseInt(seletor.value);
var valorUsado = parseFloat(minutosUsados * valorMinuto);
// Retirando do saldo atual
saldoAtual = parseFloat(saldoAtual - valorUsado);
console.log(
'Minutos usados: (' + minutosUsados + ')\n',
'Valor usado: (' + valorUsado + ')\n',
'Saldo atual: (' + saldoAtual + ')\n'
);
console.log(
'Ainda te restam: '
+ saldoAtual.toLocaleString('pt-BR', {style: 'currency', currency: 'BRL'})
+ ' de saldo disponível'
);
}
</script>
<?php
function parseFloat($parametro) {
return (float) $parametro;
}
$saldoAtual = parseFloat(21.90);
$valorHora = parseFloat(0.0304);
$valorMinuto = parseFloat($valorHora / 60);
$minutosUsados = 60; // usou 60 minutos
$valorUsado = parseFloat($minutosUsados * $valorMinuto);
$saldoAtual = parseFloat($saldoAtual - $valorUsado);
var_dump($saldoAtual);
>
Citar
Vale um ressalto sobre a técnica usada para saber o quanto o usuário usou, independente do uso do node js através de um socket que seria o método menos invasivo para o servidor.
O uso do javascript será o gatilho de tudo, mesmo que cálculos sejam realizados no servidor a máquina/hardware do usuário que irá dizer o quanto ele usou portanto pode e será usado para burlar o sistema.
Na minha opinião para um serviço web a melhor alternativa é uma data definida para término de uso de algum serviço e não cobrar o tempo de uso que é ineficaz.
E qual a dúvida?
Bom, tudo questão de matemática, concentrando-se apenas nos cálculos do tempo de uso:
-
Valor atual menos valor da hora usada = resultado a atualizar em um banco de dados.
-
Valor atual é menor que tempo atual = fim do acesso a atualizar em um banco de dados.
-
O prazo de validade é simples data de adesão ao plano + 30 dias.
-
Acesso fora do prazo de validade conta como vencido.
21,90 / 0,0304 = se minha matemática de cabeça está correta é cerca de 720 horas o que equivale a 24 horas dia durante 30 dias.
Então não sei se acertei digamos 0,0304 / 60 = 0,00506 por minuto & 0,00506 / 60 = 0,000843 por segundo.
E é isso é melhor usar o sistema para calcular precisamente lembrando que aqui fiz de cabeça, então para cada segundo ou minuto ou hora que o usuário usar você desconta esse valor no total atual que ele possui seja 21,90 ou 10,00 ou 5,99 etc...
Você pode está usando o php para realizar os cálculos e atualizar os registros, porém em hora de uso você deve detectar esse tempo de atividade, se fosse eu optaria pelo https://socket.io/ para está constantemente realizando o cálculo no servidor e atualizando os descontos no crédito. Você pode até adicionar um intervalo em que o socket irá se comunicar caso esse sistema possa conter milhares de usuários simultaneamente, assim poupa estresse do servidor porém os registros podem ficar imprecisos caso o usuário saia antes da comunicação ser executada.