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 Chester1
      oi, eu to tentando mexer com servidores agora no PHP e esta dando um erro muito estranho que quando eu procuro em um programa que acha erros de sintaxe ele me diz que o erro esta no </HTML>    se alguem puder me dizer qual foi o erro que eu cometi eu agradeceria
       

       
      <HTML> <HEAD><TITLE>incluindo no banco de dados</TITLE></HEAD> <body> <BODY bgcolor="#d0d0d0"> <center> <h3>Lanchonete coma bem (voltada para o internauta)</h3> <h1>24horas</h1> <?php $login_digitado=$_POST['login']; $senha=$_POST['senha']; $nome=$_POST['nome']; $email=$_POST['email']; $telefone=$_POST['telefone']; $celular=$_POST['celular']; $endereco=$_POST['endereco']; $complemento=$_POST['complemento']; if ($login_digitado == "" || $senha == "" || $nome =="" || $email == "" || $telefone == "" || $endereco == "" || $complemento == "") { echo "existem(m) campos(s) de preenchimento obrigatorio em branco,<BR> infelizmente tera que voltar para preenche-lo(s)."; echo "<BR><a href=\"cadastro.php\">clique aqui para tentar novamente</a>"; } else { { $link=mysql_connect("localhost", "root", "") or die ("<h1>nao foi possivel conectar !!!</h1> ".mysql_error());  
      obs :estou trabalhando com formularios e servidores
         
         
         
         
      ?>
      </BODY>
      </HTML>
    • By DavidPin94
      Boa tarde, estou tentando criar uma validação para saber se o usuário já está cadastrado no meu banco de dados para meu sistema ficar mais organizado, porém quando realizo o teste cadastrando um usuário já cadastrado, o cadastro ocorre sendo que não era para ocorrer
      <?php require_once("conexao.php");?> <?php if (isset($_POST['usuario'])) { $nome = utf8_decode($_POST['usuario']); $senha = utf8_decode($_POST['senha']); $inserir = "INSERT INTO cadastro "; $inserir .= "(usuario, senha) "; $inserir .= "VALUES "; $inserir .= "('$nome', '$senha')"; $query = "SELECT usuario FROM cadastro WHERE usuario = '$usuario' LIMIT 1"; $consulta = mysqli_query($conecta, $query); $query = "SELECT usuario FROM clientes WHERE usuario = '$usuario' LIMIT 1"; $consulta = mysqli_query($conecta, $query); if (mysqli_num_rows($consulta) < 1) { $operacao_inserir = mysqli_query($conecta, $inserir); if (! $operacao_inserir) { die("Erro no banco"); }else header("location: login.php"); }else{ die("Usuário existente!"); } } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Cadastrar novo usuário</title> <link rel="stylesheet" type="text/css" href="estilo.css"> </head> <body> <nav> <ul> <li><a href="inicial.php">PÁGINA INICIAL</a></li> <li><a href="quem_somos.php">QUEM SOMOS</a></li> </ul> </nav> <div id="cadastro"> <form method="post" action="cadastro.php"> <label>Digite seu nome de usuário</label> <input type="text" name="usuario" placeholder="Ex: Usuario123" required size="50" minlength="5" maxlength="20" autofocus><br> <label>Digite sua senha</label> <input type="password" name="senha" placeholder="Deve conter mais de 5 caracteres" required size="50" minlength="5" maxlength="20" autofocus><br> <input type="submit" value="Cadastrar" id="enviar" name="enviar"> </form> </div> </body> </html> ,  alguém poderia me ajudar?  Meu código:
    • By asacap1000
      Galera me ajudem por favor, estou pirando kkkkk
       
      Seguinte, tenho um form que realiza o submit via javascrit enviando os dados para uma página php formatada em json.
      Está gravando perfeitamente porém preciso dos dados do retorno, como Link do boleto, e alguns outros resultados para inserir no banco nesse ponto já pesquisei um monte testei de tudo até a página bugar e nada kkkk
       
      o Script que utilizo para o envio é esse:
       
      <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script> <script type="text/javascript"> $("#frmBoleto").submit(function(){ $.ajax({ type: "POST", url: "https://www.sitedaloja.com.br/action/boleto_bradesco/gerando_boleto.php", data: $(this).serializeArray(), }).done(function( msg ) { }); return false; }); </script> Como fazer para capturar os dados  da resposta do json?  
    • By Sapinn
      Salve salve! Nuca intendi como isso realmente funciona por isso gostaria da ajuda de vcs. Estou desenvolvendo um sistema de historias e acho que seria interessante no envio dessas historia além dos texto imagem ilustrativas, mais ou menos como blogs de noticias fazem, mas como posso enviar texto e imagem e depois retorna-los juntos? Eu sei com enviar imagens em php mas gostaria de enviar a imagem e o texto colocando ambos em um textarea acho que assim ficaria bem mais interessante alguém pode me ajuda?
       
    • By manoaj
      Boa noite pessoal!
      Alguém ai entente dos checkouts do Mercado Pago pra me explicar como eu obtenho os dados da preferência criada através da url disponível na API
      https://api.mercadopago.com/checkout/preferences/:id?access_token=ACCESS_TOKEN_ENV  
×

Important Information

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