Как сразу запускать таймер?

сейчас будто отчет не 60 секунд

а 61

после клика на кнопку

$(document).on('click', '.send', function(e){
  $(e.target).hide(0);
  $('p').show(0);
  
  
  let spanTime = $('span[data-time]');
  let time = Number(spanTime.data('time'));
  
  let intrvl = setInterval(function() {
    if (time == 0) {
     clearInterval(intrvl);
     $('p').hide();
     $('.send').show();
     
     spanTime.text(time);
     time = Number(spanTime.data('time'));
    }
    
    spanTime.text(time--)
  }, 1000)
})
<button class="send">отправить повторно код</button>
<p style="display: none">можно отправить через <span data-time="60">60</span> сек</p>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


Ответы (1 шт):

Автор решения: DiD

$(document).on('click', '.send', function(e){
  $(e.target).hide(0);
  $('p').show(0);
  
  
  let spanTime = $('span[data-time]');
  let time = Number(spanTime.data('time'));
  
  let handler = () => {
    if (--time == 0) {
     clearInterval(intrvl);
     $('p').hide();
     $('.send').show();
     
     spanTime.text(time);
     time = Number(spanTime.data('time'));
    }
    
    spanTime.text(time)
  };
  handler();
  
  let intrvl = setInterval(handler, 1000);
  
})
<button class="send">отправить повторно код</button>
<p style="display: none">можно отправить через <span data-time="60">60</span> сек</p>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

→ Ссылка