Ir para conteúdo

Arquivado

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

marcelobbt

Cálculo com datas

Recommended Posts

Estou tentando obter duas datas de um form e subtrair uma da outra para obter os dias perdidos e lançar num terceiro campo do form.

 

Abaixo o código.

<script>
	function diasperdidos() {
		var $dataacidente = document.getElementById('dataform');
		var $dataalta = document.getElementById('dataaltaform');
		var $prevdataalta = document.getElementById('prevdataaltaform');
		var $diasperdidos = document.getElementById('diasperdidosform');
		var umdia = 1000 * 60 * 60 * 24;
		var data1 = $dataacidente.getTime();
		if ($dataalta == null) {
			var data2 = $prevdataalta.getTime();
		} else {
			var data2 = $dataalta.getTime();
		}
    	diasp = Math.abs(data2 - data1);
    	$diasperdidos = Math.round(difference_ms/umdia);
		return $diasperdidos;
	}
</script>
<form>
<label>Data do Acidente:</label>
	<p><input type="date" name="dataform" value="" id="dataform"  /></p>
<label>Previsão da Data da Alta:</label>
	<p><input type="date" name="prevdataaltaform" value="" onfocus="diasperdidos()" id="prevdataaltaform"  /></p>
	<label>Data da Alta:</label>
	<p><input type="date" name="dataaltaform" value="" onfocus="diasperdidos()" id="dataaltaform"  /></p>
	<label>Dias Perdidos:</label>
	<p><input type="number" name="diasperdidosform" value="readonly" id="diasperdidosform"  /></p>
</form>

Será que alguém pode me indicar onde estou errando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Experimenta assim:

function diasperdidos() {
  var $dataacidente = document.getElementById('dataform').value;
  var $dataalta = document.getElementById('dataaltaform').value;
  var $prevdataalta = document.getElementById('prevdataaltaform').value;
  var $diasperdidos = document.getElementById('diasperdidosform');
  var umdia = 1000 * 60 * 60 * 24;
  var data1 = new Date($dataacidente).getTime();
  var data2 = null;
  if ($dataalta == null) {
    data2 = new Date($prevdataalta).getTime();
  } else {
    data2 = new Date($dataalta).getTime();
  }
  diasp = Math.abs(data2 - data1);
  $diasperdidos.value = Math.round(diasp/umdia);
}

Só precisas de fazer o cálculo uma vez inserida a data de alta pelo que não vale a pena estar a chamar a função no segundo campo do tipo "date". Já agora, podes usar o evento "onblur" (perda de foco), que acho que faz mais sentido neste caso.

<label>Data da Alta:</label>
<p><input type="date" name="dataaltaform" value="" onblur="diasperdidos()" id="dataaltaform"  /></p>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado!

 

resolveu o problema. Só tive que mudar o if em vez de procurar null ele procura por em branco.

 

Abaixo a solução final da função.

function diasperdidos() {
  var $dataacidente = document.getElementById('dataform').value;
  var $dataalta = document.getElementById('dataaltaform').value;
  var $prevdataalta = document.getElementById('prevdataaltaform').value;
  var $diasperdidos = document.getElementById('diasperdidosform');
  var umdia = 1000 * 60 * 60 * 24;
  var data1 = new Date($dataacidente).getTime();
  var data2 = null;
  if ($dataalta == '') {
    data2 = new Date($prevdataalta).getTime();
  } else {
    data2 = new Date($dataalta).getTime();
  }
  diasp = Math.abs(data2 - data1);
  $diasperdidos.value = Math.round(diasp/umdia);
}

Essa questão do onblur também ajudou bastante. Era exatamente o que procurava, mas não sabia qual era o termo para quando desmarcava o campo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por alessandra.barreto
      Boa Tarde
      Estou fazendo uma importacao de dados do SQL pro Oracle.
      Tenho campos (datetime2(7)) no SQL e Date no Oracle.
      Não consigo fazer a importação, o Oracle retorna erro de  [Microsoft][ODBC Oracle Wire Protocol driver]Timestamp parameters with a scale, must have a scale less than ten and a precision equal to 20 plus the scale.  You specified a precision of 0 and scale of 6. ". Alguém pode me ajudar?

       
    • Por Wanderson Moreira
      Boa tarde
      Alguém poderia me ajudar com uma situação?
       
      Estou tentado comparar datas para me retornar 3 situações: Vencendo, Vencido, e Ativo
      porem acredito que o formato delas estejam erradas, pois ao compará-las o valor retorna errado
       
      $data = date_create("30-07-2020"); $vencimento = date_format($data, "d-m-Y"); $dataHoje = date("d-m-Y"); $dataVencer = date('d-m-Y', strtotime('+15 days')); if($vencimento > $dataVencer){echo 'Ativo';}  
      no exemplo estou comparando se 30-07-2020 for maior > 07-08-2020 exibir o texto "Ativo"
      Porem 30-07-2020 não é maior do que 07-08-2020 e mesmo assim o valor retornado esta sendo "ativo"
       
       
       

       
       
    • Por lucianfpaula
      Olá, saudações a todos, eu tenho a seguinte duvida: preciso identificar se a data do dia esta dentro de um intervalo de datas, nos temos o seguinte sql
      "SELECT * FROM tb_cadastro WHERE datCadastro BETWEEN '2010/09/10' AND '2011/10/10'".
      O que preciso é saber se a data do dia este nesse intervalo. Tipo
      Data 01 = 01/02/2020
      Data 02 = 10/02/2020
      Data 03 = 05/02/2020
      se Data 03 estiver no intervalo de Data 01 e Data 02 faça algo se não faça nada
    • Por Viniciusr9
      Boa tarde pessoal,
      basicamente eu preciso do retorno de horas entre duas datas, porém tenho condições a tratar .
      basicamente tenho 2 colunas ( dt_fim e dt_ini ) que representam data final e data inicial. Preciso da diferença entre as duas retornada em uma outra coluna (hr_ausencias) , porém a cada dia posso computar no máximo 9 horas, e desconsiderar finais de semana e feriados( esses cadastrados em uma tabela) . Seria melhor tratar isso com uma Trigger , um Script PL/SQL , como me sugerem? Agradeço quem puder ajudar.
    • Por leonardorocha
      Prezados, boa tarde!
       
      Tenho uma apresentação que imprime determinados valores de acordo com a data cadastrada no sistema.
       
      O código abaixo está funcionando para algumas datas e outras não. Um exemplo é o intervalo de datas 01/03/2019 a 30/06/2019
       
      Este nunca é executado conforme o código abaixo. Se alguém souber aonde encontra-se o erro por favor me informe.
      <div class="row justify-content-md-center"> <?php foreach ($model->getItems() as $calendar) { $dataI = date("d/m/Y", strtotime($calendar->start_date)); $dataF = date("d/m/Y", strtotime($calendar->end_date)); $titulo = $calendar->title; ?> <div class="col-md-3 col-sm-6"> <div class="item-calendario"> <div itemprop="event" itemscope itemtype="http://schema.org/Event"> <?php $atual = strtotime(date("d/m/Y")); $periodo = array('inicio' => strtotime($dataI), 'fim' => strtotime($dataF)); if($atual >= $periodo['inicio'] && $atual <= $periodo['fim'] ){ echo '<div class="icone-calendario"><i class="fa fa-clock-o fa-lg" aria-hidden="true" style="color:#0661ab"></i></div> <div class="status-calendario agora"><span>AGORA</span></div>'; } if($atual < $periodo['inicio'] && $atual < $periodo['fim'] ){ echo '<div class="status-calendario"><span>EM BREVE</span></div>'; } ?> <div class="periodo-calendario" itemprop="startDate" content="{{startDateIso}}"> <span><?php echo $dataI . ' a ' . $dataF ?></span> </div> <div class="texto-calendario"> <a href="<?php echo $calendar->url; ?>" itemprop="url"> <span itemprop="name"><?php echo $titulo; ?></span> </a> </div> </div> </div> </div> <?php } ?> </div>  
×

Informação importante

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