Jump to content
Guilherme Luiz

Calculo composto de tempo

Recommended Posts

Olá pessoal,

 

Estou precisando fazer um calculo composto de tempo.

Esse calculo terá valores dinâmicos de tempo e quantidade de acordo com o input do usuario. A intenção é fazer uma fracionador de envios de e-mail, onde o usuário vai dizer que quer dividir o total de envios que possui em X partes em Y tempo entre cada uma das partes.

 

Por exemplo:

 

- Total de envios: 200

- Fracionar em: 15 partes

- Tempo entre as partes: 20 minutos

- Inicio: 15h00m

 

Dentro desse cenário eu precisaria gerar uma lista da seguinte forma:

 

parte 01 - 15h00m

parte 02 - 15h20m

parte 03 - 15h40m

parte 04 - 16h00m

parte 05 - 16h20m

...e assim sucessivamente, sempre calculando o tempo de forma composta/progressiva

 

Na matemática simples o calculo seria básico:

Parte * Tempo = X + Inicio (X é o tempo que buscamos para ir adicionando de forma composta de acordo com o numero da parte do envio)

 

Exemplo:

1 * 20 = X + 15h00m -> x = 20 + 15h00m = 15h20m

2 * 20 = X + 15h00m -> x = 40 + 15h00m = 15h40m

3 * 20 = X + 15h00m -> x = 60 + 15h00m = 16h00m

 

Como coloco isso no PHP para ser impresso numa lista, onde a lista precisaria ficar organizada entre as partes sendo demonstrado algo como:

 

 

Envio 01 - Parte 01 - 15h00

Envio 02 - Parte 01 - 15h00

Envio 03 - Parte 01 - 15h00

...

Envio 16 - Parte 02 - 15h20

Envio 17 - Parte 02 - 15h20

Envio 18 - Parte 02 - 15h20

...

Envio 31 - Parte 03 - 15h40

Envio 32 - Parte 03 - 15h40

Envio 33 - Parte 03 - 15h40

 

Vejam, a dúvida é sobre como criar o calculo composto porque a manipulação do tempo frente ao total de minutos que serão adicionados ao tempo inicial isso tenho em mente como fazer.

Alguém consegue dar essa força ou me indicar algum material de leitura para conseguir aplicar essa regra?

Share this post


Link to post
Share on other sites

@Guilherme Luiz 

 

Bom para criar o calculo do tempo entre os envios de e-mail, você pode fazer usando o método Date do próprio php.

 

Vou deixa a documentação do método Date dá W3 https://www.w3schools.com/php/php_ref_date.asp.

 

Obs..: O método Date também conta com um modelo POO

 

Um exemplo de como usar:

<?php

$data = date_create();

$dados = array(
	"numeroEnvios"=>20, // Numero de e-mail que Serão enviados
	"intervalo"=>"15 minutes", // Intervalo entre os pacotes de envio de e-mail
	"numeroPacotes"=>4 // Numero de pacotes de envio de e-mail
);

$dadosEnvio = array(); // Array com a ordem de envio

$envio = 1;

for ($num = 1; $num < $dados["numeroPacotes"] + 1; $num++)
{
	for($num_2 = 0; $num_2 < ceil($dados["numeroEnvios"] / $dados["numeroPacotes"]); $num_2++)
	{
		if($envio < $dados["numeroEnvios"] + 1)
		{
			$dadosEnvio[$num - 1][$num_2] = array(
				"Id"=>$envio,
				"Id_pacote"=>$num,
				"Data"=>date_format($data,"Y-m-d H:i")	
			);
		}
		else
		{
			break;
		}
		$envio++;
	}
	date_add($data, date_interval_create_from_date_string($dados["intervalo"]));
}

var_dump($dadosEnvio); // retorno

O reporta ficaria assim:

array(4) { 
	[0]=> array(5) { 
		[0]=> array(3) { ["Id"]=> int(1) ["Id_pacote"]=> int(1) ["Data"]=> string(16) "2019-07-08 19:01" } 
		[1]=> array(3) { ["Id"]=> int(2) ["Id_pacote"]=> int(1) ["Data"]=> string(16) "2019-07-08 19:01" } 
		[2]=> array(3) { ["Id"]=> int(3) ["Id_pacote"]=> int(1) ["Data"]=> string(16) "2019-07-08 19:01" } 
		[3]=> array(3) { ["Id"]=> int(4) ["Id_pacote"]=> int(1) ["Data"]=> string(16) "2019-07-08 19:01" } 
		[4]=> array(3) { ["Id"]=> int(5) ["Id_pacote"]=> int(1) ["Data"]=> string(16) "2019-07-08 19:01" } 
	} 
	[1]=> array(5) { 
		[0]=> array(3) { ["Id"]=> int(6) ["Id_pacote"]=> int(2) ["Data"]=> string(16) "2019-07-08 19:16" } 
		[1]=> array(3) { ["Id"]=> int(7) ["Id_pacote"]=> int(2) ["Data"]=> string(16) "2019-07-08 19:16" } 
		[2]=> array(3) { ["Id"]=> int(8) ["Id_pacote"]=> int(2) ["Data"]=> string(16) "2019-07-08 19:16" } 
		[3]=> array(3) { ["Id"]=> int(9) ["Id_pacote"]=> int(2) ["Data"]=> string(16) "2019-07-08 19:16" } 
		[4]=> array(3) { ["Id"]=> int(10) ["Id_pacote"]=> int(2) ["Data"]=> string(16) "2019-07-08 19:16" } 
		} 
	[2]=> array(5) { 
		[0]=> array(3) { ["Id"]=> int(11) ["Id_pacote"]=> int(3) ["Data"]=> string(16) "2019-07-08 19:31" } 
		[1]=> array(3) { ["Id"]=> int(12) ["Id_pacote"]=> int(3) ["Data"]=> string(16) "2019-07-08 19:31" } 
		[2]=> array(3) { ["Id"]=> int(13) ["Id_pacote"]=> int(3) ["Data"]=> string(16) "2019-07-08 19:31" } 
		[3]=> array(3) { ["Id"]=> int(14) ["Id_pacote"]=> int(3) ["Data"]=> string(16) "2019-07-08 19:31" } 
		[4]=> array(3) { ["Id"]=> int(15) ["Id_pacote"]=> int(3) ["Data"]=> string(16) "2019-07-08 19:31" } 
	} 
	[3]=> array(5) { 
		[0]=> array(3) { ["Id"]=> int(16) ["Id_pacote"]=> int(4) ["Data"]=> string(16) "2019-07-08 19:46" } 
		[1]=> array(3) { ["Id"]=> int(17) ["Id_pacote"]=> int(4) ["Data"]=> string(16) "2019-07-08 19:46" } 
		[2]=> array(3) { ["Id"]=> int(18) ["Id_pacote"]=> int(4) ["Data"]=> string(16) "2019-07-08 19:46" } 
		[3]=> array(3) { ["Id"]=> int(19) ["Id_pacote"]=> int(4) ["Data"]=> string(16) "2019-07-08 19:46" } 
		[4]=> array(3) { ["Id"]=> int(20) ["Id_pacote"]=> int(4) ["Data"]=> string(16) "2019-07-08 19:46" } 
	} 
}

 

Share this post


Link to post
Share on other sites

Muito obrigado @gabrielms

 

Ao final utilizando o core do seu código eu cheguei na seguinte função:
 

<?php 

function fractionate($vol,$parts,$interval,$date){
  $initalDate   = date_create($date);
  $intervalList = [];
  $result       = [];
  $limiterList  = 1;
  ##########
  for ($num = 1; $num < $parts + 1; $num++){
    for($num_2 = 0; $num_2 < ceil($vol / $parts); $num_2++)	{
      if($limiterList < $vol + 1){
        $intervalList[$num-1][$num_2] = date_format($initalDate,"Y-m-d H:i:s");
      }else{
        break;
      }
    $limiterList++;
    }
    date_add($initalDate, date_interval_create_from_date_string($interval.' minutes'));
  }
  ##########
  foreach($intervalList as $k){
    foreach($k as $v){
      $result[] = $v;
    }
  }
  return $result;
}

 

Desta forma eu tenho um array com os horários numa lista com a mesma quantidade de indices de um array meu com a lista de e-mails. Desta forma eu crio um agendamento para todos os envios com base na hora de envio do usuário, seja ela imediata ou programada.

 

Muito obrigado!
 

obs: Tentei dar +1 mas o forum está dando erro, logo volto aqui e tento pontuar novamente

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Camilavip
      Oi, como consigo fazer uma página de erro ou redirecionamento ou aviso, caso alguém clique em um cadastro que já não existe ou não tenha?
      localhost/clientes/12/ricardo No exemplo acima eu clico no cliente com esse id 12 e abre os dados dele, mas se eu o excluir mas estiver com o link e colocar no navegador, ele abre a página, sem os dados dele, mas abre. Eu queria se caso não tivesse mais o id cadastrado, abrisse algo como nenhum cadastro encontrado ou existente.
    • By mamotinho
      Olá, gostaria de sabe como posso fazer uma contagem regressiva apartir de um registro em meu banco de dados eu tentei montar um código da seguinte forma:

       
      <? $DateGET = date('m/d/Y H:i A', strtotime($result->DateDiscount)); ?> <script> var valueDate = <?=$DateGET?>; var end = new Date(valueDate); var _second = 1000; var _minute = _second * 60; var _hour = _minute * 60; var _day = _hour * 24; var timer; function showRemaining() { var now = new Date(); var distance = end - now; if (distance < 0) { clearInterval(timer); document.getElementById("countdown").innerHTML = "EXPIRED!"; return; } var days = Math.floor(distance / _day); var hours = Math.floor((distance % _day) / _hour); var minutes = Math.floor((distance % _hour) / _minute); var seconds = Math.floor((distance % _minute) / _second); document.getElementById("countdown").innerHTML = "<span class='n_date day' id='days'>" + days + "</span><span class='date'>일</span>"; document.getElementById("countdown").innerHTML += "<span class='n_time hour' id='hrs'>" + hours + "</span>"; document.getElementById("countdown").innerHTML += "<span class='n_time minute' id='minus'>" + minutes + "</span>"; document.getElementById("countdown").innerHTML += "<span class='n_time second' id='secs'>" + seconds + "</span>"; } timer = setInterval(showRemaining, 1000); </script> Mais infelizmente não passou a data registrada no banco de dados, alguém teria ideia de como posso ta fazendo.
    • By emmanuelsiqueira30
      Pessoal preciso de uma ajudinha aqui se alguém puder me ajudar fico muito agradecido.
      O problema é o seguinte gostaria de editar dados de um formulário com checkbox usando html e php.
      Desde já agradeço por toda ajuda.
    • By liniker.o
      Boa tarde pessoal!
      Estou com um problema em meu código quando coloco uma referencia de fonte a mesma não carrega, quando faça o mesmo procedimento local colocando os caminhos de pasta funciona normalmente.
      Será que alguém poderia me ajudar?
      Segue o código.
      <html> <head> <title>Minha pagina</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <!-- Se não declarar charset por meta, envie um header de igual valor --> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <?php //Carregar imagem tamanho da imagen = 515x76 $img = ImageCreateFromJPEG("base.jpg"); //Definir cor $cor1 = imagecolorallocate($img, 0, 0, 0); $cor2 = imagecolorallocate($img, 0, 0, 0); // carregar fonte... $fonte1 = 'https://ff.static.1001fonts.net/r/o/roboto-condensed.light.ttf'; $fonte2 = 'https://ff.static.1001fonts.net/r/o/roboto-condensed.light.ttf'; //Escrever nome $txtNome = $_POST['nome']; $txtFuncao = $_POST['func']; $txtEmail = $_POST['email']; $txtDDD = "+55 ".$_POST['telefone']; // IMAGEM, TAMANHO_FONTE, 0, POSICAO X, posicao Y, TEXTO_COR, ARQ_FONTE, TEXTO imagettftext($img, 32, 0, 250, 100, $cor1, $fonte1, $txtNome); imagettftext($img, 18, 0, 250, 125, $cor1, $fonte2, $txtFuncao); imagettftext($img, 18, 0, 250, 150, $cor1, $fonte2, $txtEmail); imagettftext($img, 18, 0, 250, 180, $cor1, $fonte2, $txtDDD); //Header e output header('Content-type: image/jpeg'); imagejpeg($img,"Assinatura - ".$txtNome.".jpg"); imagedestroy($img); header('Location: Assinatura - '.$txtNome.'.jpg'); ?>  
    • By gersonab
      Boa tarde a todos, tenho um sistema de upload de arquivos que funciona perfeitamente, agora eu gostaria que estes arquivos fossem armazenados em nuvem, não no servidor, poderiam indicar um tutorial ou como proceder.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.