Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

TaijovuNeji

[Resolvido] Condição de tempo

Recommended Posts

Olá a todos ^^

 

Meu site tem um sistema de shop.. neste sistema de shop eu queria fazer um banco onde o dinheiro que a pessoa depositava todo dia recebece uma porcentagem de juros.. o sistema de benco tah pronto... soh falta esse detalhe.. pq eu não tenho nem idéia de como fazer um sistema que conte o tempo para que depois de 24 horas adicione uma porcentagem ao dinheiro da pessoa Oo

 

Alguém tem alguma idéia de como fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você poderia fazer uma cronjob para atualizar o banco à cada dia.. rodando por exemplo às 0h00

OU algo como, gravar qndo foi a última vez que o cara entrou, e subtrair da vez atual, ai você incrementa os juros antes de mostrar para ele.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pq eu não tenho nem idéia de como fazer um sistema que conte o tempo para que depois de 24 horas adicione uma porcentagem ao dinheiro da pessoa Oo

 

Não acho que você deva 'adicionar' o montante de juros ao inicial. O ideal seria gravar no mesmo registro o timestamp do momento do depósito, além de não ser destrutivo você tem condições de exibir um extrato com os valores reais e também do rendimento do mesmo.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas tipo.. o sistema de banco seria para dinheiro que só existe dentro do próprio forum XD.. não é dinheiro de verdade não ^^

 

Bruno e Neto... um de vcs poderia me mostrar um código disso que vcs falaram? Pq eu não sei como criar isso Oo..

Mas vlw ae pela ajuda que estão me dando http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo,

 

Imagina que você tenha uma tabela de depósitos assim:

 

mysql> create table `depositos` (
 -> `id` mediumint(8) unsigned not null auto_increment,
 -> `depositante` mediumint(8) unsigned not null,
 -> `capital` decimal(15,3) unsigned not null,
 -> `data` timestamp default current_timestamp on update current_timestamp,
 -> primary key(`id`),
 -> key `depositantes`(`depositante`),
 -> key `depositos`(`depositante`,`data`)
 -> );
Query OK, 0 rows affected (0.03 sec)

Onde a coluna depositante é o id da tabela de pessoas, ai em um dia qualquer a pessoa vai lá e faz um depósito:

 

mysql> insert into `depositos`(`depositante`,`capital`) values(1,1000);
Query OK, 1 rows affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0

Após alguns depósitos feitos, sua tabela ficou assim:

mysql> select * from `depositos`;
+----+-------------+----------+---------------------+
| id | depositante | capital | data |
+----+-------------+----------+---------------------+
| 1 | 1 | 1000.000 | 2009-09-08 06:21:46 |
| 2 | 1 | 150.000 | 2009-09-20 06:21:46 |
| 3 | 1 | 120.550 | 2009-10-09 06:21:46 |
+----+-------------+----------+---------------------+
3 rows in set (0.00 sec)

Bom, como se trata de juros e de dinheiro então se trata de juros composto:

 

M = C * ( 1 + J )^t

 

M => montante

C => capital

J => taxa de juros aplicada

t => tempo

 

Vamos fazer a conta baseada em um rendimento diário de 0.545%

 

C = 1000 (valor que foi depositado)

J = 0.545 (ao dia)

t = 30 (dias)

 

M = 1000 * ( 1 + 0.00545 )^30

M = 1000 * 1.177

M = 1177.10

 

Usando o banco de dados:

 

mysql> select
 -> `capital` * pow( 1 + 0.00545 , timestampdiff(day,d1.`data`,now()) ) 'montante'
 -> from
 -> `depositos` d1
 -> where
 -> `depositante`=1;
+------------------+
| montante |
+------------------+
| 1183.5179031958 |
| 166.318419610809 |
| 120.55 |
+------------------+
3 rows in set (0.00 sec)

Ajustando a saída:

mysql> select
 -> cast(`capital` * pow( 1 + 0.00545 , timestampdiff(day,d1.`data`,now()) ) as decimal(12,3)) 'montante'
 -> from
 -> `depositos` d1
 -> where
 -> `depositante`=1;
+----------+
| montante |
+----------+
| 1183.518 |
| 166.318 |
| 120.550 |
+----------+
3 rows in set (0.00 sec)

Agora somando tudo para saber quanto a pessoa depositou e quanto ela tem:

 

mysql> select
 -> sum(`capital`) 'capital',
 -> sum(cast(`capital` * pow( 1 + 0.00545 , timestampdiff(day,d1.`data`,now()) ) as decimal(12,3))) 'montante'
 -> from
 -> `depositos` d1
 -> where
 -> `depositante`=1;
+----------+----------+
| capital | montante |
+----------+----------+
| 1270.550 | 1470.386 |
+----------+----------+
1 row in set (0.01 sec)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então cara.. o calculo que tenho de fazer para calcular quanto a pessoa terá a mais na conta é bem mais simples.. eu soh preciso pegar o valor total de dinheiro depositado.. e colocar 10% desse valo pra mais..

 

O que eu realmente não entendi como fazer.. é como conseguir fazer isso a cada 24 horas..seria usando o data?: `data` timestamp default current_timestamp on update current_timestamp

Compartilhar este post


Link para o post
Compartilhar em outros sites

CronJob.. mas +10%/dia me parece muito alto...

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu soh preciso pegar o valor total de dinheiro depositado.. e colocar 10% desse valo pra mais..

 

Como eu disse:

 

M = C * ( 1 + J )^t

Isso já é suficiente, o calculo é feito diretamente no banco de dados e você nem precisará inserir um novo registro para cada dia, por exemplo:

 

Dia 1: deposito de 10

 

Se hoje for o dia 6:

 

1. 10

2. 11.00 <= 10 + 10%

3. 12.10 <= 11 + 10%

4. 13.31 <= 12.10 + 10%

5. 14.641 <= 13.31 + 10%

6. 16.1051 <== Hoje, com o rendimento, o montante para o depósito de 10 é 16.1051

 

Como entre o dia do depósito e hoje temos 5 dias, o calculo ficaria assim:

 

Para o depósito de 10

M = C * ( 1 + J ) ^t

M = 10 * ( 1 + 0.10 )^5

M = 10 * 1.10^5

M = 10 * 1.61051

M = 16.1051

 

Dessa forma, você não precisa de cronjob nem ficar inserindo registros no banco de dados. Basta utilizar o cálculo de juros compostos.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hummmm o cálculo de tempo é feito pelo banco de dados? Eu achei que eu teria que por algum comando que checasse o tempo com base na hora do servidor XD

 

vlw mesmo gente pela ajuda.. vo tentar implementar isso que vcs disseram ^.^

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.