Portal SAMP
[Ajuda] Trabalhando com datas no samp - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Trabalhando com datas no samp (/showthread.php?tid=2592)



Trabalhando com datas no samp - hiwyn - 24/07/2022

Como salvar numa variavel
bonus[MAX_PLAYERS];

Com algum tipo de data no pawno pra uma hora de bonus de 1 hora, e quando você desse o comando /bonus

Se você ainda tivesse bonus diz "você ainda tem 45 minutos de bonus" por exemplo?


RE: Trabalhando com datas no samp - Luiz - 25/07/2022

Use timestamp.

Código PHP:
bonus[playerid] = gettime() + 3600;

// Para verificar o tempo restante:
printf("Faltam %d minutos para o seu bônus acabar.", (bonus[playerid]-gettime())/60); 



RE: Trabalhando com datas no samp - hiwyn - 28/07/2022

(25/07/2022 00:46)Luiz Escreveu: Use timestamp.

Código PHP:
bonus[playerid] = gettime() + 3600;

// Para verificar o tempo restante:
printf("Faltam %d minutos para o seu bônus acabar.", (bonus[playerid]-gettime())/60); 

Desculpa a demora Luiz, obrigado pela base, reputado!
Mas e pra dias, meses, horas?


RE: Trabalhando com datas no samp - xbruno1000x - 28/07/2022

(28/07/2022 18:02)hiwyn Escreveu: Desculpa a demora Luiz, obrigado pela base, reputado!
Mas e pra dias, meses, horas?

Basta ao invés de  usar GetTime() use o Now().


RE: Trabalhando com datas no samp - Carlos Victor - 29/07/2022

(28/07/2022 18:02)hiwyn Escreveu:
(25/07/2022 00:46)Luiz Escreveu: Use timestamp.

Código PHP:
bonus[playerid] = gettime() + 3600;

// Para verificar o tempo restante:
printf("Faltam %d minutos para o seu bônus acabar.", (bonus[playerid]-gettime())/60); 

Desculpa a demora Luiz, obrigado pela base, reputado!
Mas e pra dias, meses, horas?

Para tempo, no caso hora, minutos e segundos, você pode usar a função gettime, é uma função que retorna o atual valor do Unix Timestamp, e pra usar ele é bem simples, usando apenas cálculos como:

Horas: Você deve subtrair o valor antigo com o valor atual e dividir por 3600, como a fórmula:
Código PHP:
new tempoAntigo 1659131860;    // 18:57:40
new tempoAtual 1659135460;    // 19:57:40

printf("Horas restantes: %d", (tempoAtual tempoAntigo) / 3600);
//> Horas restantes: 1 


Minutos:
 Você deve subtrair o valor antigo com o valor atual e dividir por 60.

Código PHP:
new tempoAntigo 1659135405;    // 19:56:40
new tempoAtual 1659135460;    // 19:57:40

printf("Minutos restantes: %d", (tempoAtual tempoAntigo) / 60);
//> Minutos restantes: 1 


Segundos: Você deve subtrair o valor antigo com o valor atual e retornar o resto da divisão por 60.
Código PHP:
new tempoAntigo 1659135405;    // 19:56:45
new tempoAtual 1659135460;    // 19:57:40

printf("Segundos restantes: %d", (tempoAtual tempoAntigo) % 60);
//> Segundos restantes: 55 


E com isso você consegue fazer os cálculos para obter a hora, minuto e segundos.


Para datas, como: Dia, mês e ano
Dia: Você deverá dividir o valor atual com o valor antigo por 86400, que é o equivalente a 1 dia em segundos.
Código PHP:
new tempoAntigo 1659050500;    // 28/07/2022
new tempoAtual 1659136900;    // 29/07/2022

printf("Dias restantes: %d", (tempoAtual tempoAntigo) / 86400);
//> Dias restantes: 1 


Mês: Você deverá subtrair o valor atual com o valor antigo, pegar o resto da divisão entre 86300(1 dia) vezes 30(1 mês)
Código PHP:
new tempoAntigo 1659050500;    // 29/06/2022
new tempoAtual 1659136900;    // 29/07/2022

printf("Meses restantes: %d", (tempoAtual tempoAntigo) / (86400 30));
//> Meses restantes: 1 

Ano:
Código PHP:
new tempoAntigo 1609545600;    // 29/07/2021
new tempoAtual 1641081600;    // 29/07/2022

printf("Ano restantes: %d", (tempoAtual tempoAntigo) / (86400 30 12));
//> Ano restantes: 1 



É basicamente isso, usando a função gettime, que retorna o Unix Timestamp, você pode optar pelo getdate, que retorna o atual dia do ano, por exemplo, hoje estamos no dia 210.
Espero ter ajudado, qualquer dúvida avise, e caso eu errei, corrigem-me.

Na verdade, talvez eu tenha me equivocado com o Unix Timestamp, a função gettime ela retorna a hora, minuto, segundo caso queira, sem ter que fazer esses cálculos todo.

A função só irá retornar o Unix Timestamp caso você não puxar nenhum dos dados, gettime(hour=0, minute=0, second=0)
Então, caso tu queira fazer algo mais simples, pegar só os segundos, minutos ou horas, é só criar uma váriavel e fazer.


Código PHP:
new segundosminutoshora;
gettime(horaminutossegundos);

printf("Segundos: %d"segundos);
printf("Minutos: %d"minutos);
printf("Horas: %d"hora);

//Segundos: 46
//Minutos: 38
//Horas: 20 

Isso é válido também pro getdate, que é semelhante ao gettime.
Código PHP:
new diamesano;
getdate(anomesdia);

printf("Dia: %d"dia);
printf("Mes: %d"mes);
printf("Ano: %d"ano);

//Dia: 29
//Mês: 7
//Ano: 2022 

Desculpa a explicação desnecessária talvez pra algo simples, eu me confundi, mas de qualquer forma, está ai os exemplos acimas.


RE: Trabalhando com datas no samp - hiwyn - 20/09/2022

(29/07/2022 20:33)Carlos Victor Escreveu:
(28/07/2022 18:02)hiwyn Escreveu:
(25/07/2022 00:46)Luiz Escreveu: Use timestamp.

Código PHP:
bonus[playerid] = gettime() + 3600;

// Para verificar o tempo restante:
printf("Faltam %d minutos para o seu bônus acabar.", (bonus[playerid]-gettime())/60); 

Desculpa a demora Luiz, obrigado pela base, reputado!
Mas e pra dias, meses, horas?

Para tempo, no caso hora, minutos e segundos, você pode usar a função gettime, é uma função que retorna o atual valor do Unix Timestamp, e pra usar ele é bem simples, usando apenas cálculos como:

Horas: Você deve subtrair o valor antigo com o valor atual e dividir por 3600, como a fórmula:
Código PHP:
new tempoAntigo 1659131860;    // 18:57:40
new tempoAtual 1659135460;    // 19:57:40

printf("Horas restantes: %d", (tempoAtual tempoAntigo) / 3600);
//> Horas restantes: 1 


Minutos:
 Você deve subtrair o valor antigo com o valor atual e dividir por 60.

Código PHP:
new tempoAntigo 1659135405;    // 19:56:40
new tempoAtual 1659135460;    // 19:57:40

printf("Minutos restantes: %d", (tempoAtual tempoAntigo) / 60);
//> Minutos restantes: 1 


Segundos: Você deve subtrair o valor antigo com o valor atual e retornar o resto da divisão por 60.
Código PHP:
new tempoAntigo 1659135405;    // 19:56:45
new tempoAtual 1659135460;    // 19:57:40

printf("Segundos restantes: %d", (tempoAtual tempoAntigo) % 60);
//> Segundos restantes: 55 


E com isso você consegue fazer os cálculos para obter a hora, minuto e segundos.


Para datas, como: Dia, mês e ano
Dia: Você deverá dividir o valor atual com o valor antigo por 86400, que é o equivalente a 1 dia em segundos.
Código PHP:
new tempoAntigo 1659050500;    // 28/07/2022
new tempoAtual 1659136900;    // 29/07/2022

printf("Dias restantes: %d", (tempoAtual tempoAntigo) / 86400);
//> Dias restantes: 1 


Mês: Você deverá subtrair o valor atual com o valor antigo, pegar o resto da divisão entre 86300(1 dia) vezes 30(1 mês)
Código PHP:
new tempoAntigo 1659050500;    // 29/06/2022
new tempoAtual 1659136900;    // 29/07/2022

printf("Meses restantes: %d", (tempoAtual tempoAntigo) / (86400 30));
//> Meses restantes: 1 

Ano:
Código PHP:
new tempoAntigo 1609545600;    // 29/07/2021
new tempoAtual 1641081600;    // 29/07/2022

printf("Ano restantes: %d", (tempoAtual tempoAntigo) / (86400 30 12));
//> Ano restantes: 1 



É basicamente isso, usando a função gettime, que retorna o Unix Timestamp, você pode optar pelo getdate, que retorna o atual dia do ano, por exemplo, hoje estamos no dia 210.
Espero ter ajudado, qualquer dúvida avise, e caso eu errei, corrigem-me.

Na verdade, talvez eu tenha me equivocado com o Unix Timestamp, a função gettime ela retorna a hora, minuto, segundo caso queira, sem ter que fazer esses cálculos todo.

A função só irá retornar o Unix Timestamp caso você não puxar nenhum dos dados, gettime(hour=0, minute=0, second=0)
Então, caso tu queira fazer algo mais simples, pegar só os segundos, minutos ou horas, é só criar uma váriavel e fazer.


Código PHP:
new segundosminutoshora;
gettime(horaminutossegundos);

printf("Segundos: %d"segundos);
printf("Minutos: %d"minutos);
printf("Horas: %d"hora);

//Segundos: 46
//Minutos: 38
//Horas: 20 

Isso é válido também pro getdate, que é semelhante ao gettime.
Código PHP:
new diamesano;
getdate(anomesdia);

printf("Dia: %d"dia);
printf("Mes: %d"mes);
printf("Ano: %d"ano);

//Dia: 29
//Mês: 7
//Ano: 2022 

Desculpa a explicação desnecessária talvez pra algo simples, eu me confundi, mas de qualquer forma, está ai os exemplos acimas.


eu já tinha conseguido com a resposta do outro amigo lá, mas te reputei por mandar outra mais completa, pode ajudar outra pessoa Wink