Javasacript Countdown timer in Days, Hours, Minute, Seconds

后端 未结 5 1213
慢半拍i
慢半拍i 2020-12-06 02:06

I\'m trying to create a time-based count down clock. It is not based upon current_dates. The initial time that will be pulled will be from a separate php file. This will be

相关标签:
5条回答
  • 2020-12-06 02:16

    Here is my worked out and tested example, based on your code

    <span id="countdown"></span>
    <script>
         var current_level = 3002;
    
         function timer() {
    
            var days = Math.floor(current_level/86400);
            var remainingDays = current_level - (days * 86400);
    
            //if (days <= 0){
            //    days = current_level;
            //}
    
            var hours = Math.floor(remainingDays/3600);
            var remainingHours = remainingDays - (hours * 3600);
    
            //if (hours >= 24){
            //     hours = 23;
            //}
    
            var minutes = Math.floor(remainingHours/60);
            var remainingMinutes = remainingHours - (minutes * 60);
    
            //if (minutes >= 60) {
            //     minutes = 59;
            //}
    
            var seconds = remainingMinutes;
    
            document.getElementById('countdown').innerHTML = days + ":" + hours + ":" + minutes + ":" + seconds;
    
            //if (seconds == 0) {
            //    clearInterval(countdownTimer);
            //     document.getElementById('countdown').innerHTML = "Completed";
            //}
    
            current_level--;
         }
         var countdownTimer = setInterval(timer, 1000);
    </script>
    
    0 讨论(0)
  • 2020-12-06 02:17

    Personally I would use the jquery countdown timer integration. It is simple and having number of options to display in different formats. Since I am fairly new to JS as well, this was the easiest way I found to get a count/timer.

    http://keith-wood.name/countdown.html

    0 讨论(0)
  • 2020-12-06 02:26

    Thanks to OP Phoenix Ryan I made the following React component using your solution. Many thanks!

    const Panel = ({label, n}) => (
      <div className="panel">
        <small>{label}</small>
        <span>{n < 10 ? "0" + n : n}</span>
      </div>
    )
    
    const App = () => {
      const [secondsLeft, setSecondsLeft] = React.useState(86403)
    
      React.useEffect(() => {
        const interval = setInterval(() => {
          if (secondsLeft == 0) {
            clearInterval(interval);
            console.log('Times up!')
          } else {
            setSecondsLeft(secondsLeft - 1)
          }
        }, 1000)
        return () => clearInterval(interval)
      })
      
      const days = Math.floor(secondsLeft/24/60/60);
      const hoursLeft = Math.floor((secondsLeft) - (days*86400));
      const hours = Math.floor(hoursLeft/3600);
      const minutesLeft = Math.floor((hoursLeft) - (hours*3600));
      const minutes = Math.floor(minutesLeft/60);
      const seconds = secondsLeft % 60;
        
      return (
        <div className="root">
          <Panel label="Days" n={days} />
          <Panel label="Hours" n={hours} />
          <Panel label="Minutes" n={minutes} />
          <Panel label="Seconds" n={seconds} />
        </div>
      )
    }
    
    ReactDOM.render(
      <App/>,
      document.getElementById('root')
    )
    .root {
      display: flex;
    }
    
    .panel {
      display: flex;
      flex-direction: column;
      align-items: center;
      margin-right: 8px;
      color: #444;
    }
    
    .panel small {
      font-size: 9px;
      text-transform: uppercase;
      font-family: sans-serif;
    }
    
    .panel span {
      font-size: 3em;
      font-weight: bold;
      font-family: serif;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.13.1/umd/react.production.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.13.1/umd/react-dom.production.min.js"></script>
    <div id="root"></div>

    0 讨论(0)
  • 2020-12-06 02:31

    I finally got back to looking at this and re-wrote the code and this works like a charm.

    var upgradeTime = 172801;
    var seconds = upgradeTime;
    function timer() {
      var days        = Math.floor(seconds/24/60/60);
      var hoursLeft   = Math.floor((seconds) - (days*86400));
      var hours       = Math.floor(hoursLeft/3600);
      var minutesLeft = Math.floor((hoursLeft) - (hours*3600));
      var minutes     = Math.floor(minutesLeft/60);
      var remainingSeconds = seconds % 60;
      function pad(n) {
        return (n < 10 ? "0" + n : n);
      }
      document.getElementById('countdown').innerHTML = pad(days) + ":" + pad(hours) + ":" + pad(minutes) + ":" + pad(remainingSeconds);
      if (seconds == 0) {
        clearInterval(countdownTimer);
        document.getElementById('countdown').innerHTML = "Completed";
      } else {
        seconds--;
      }
    }
    var countdownTimer = setInterval('timer()', 1000);
    <span id="countdown" class="timer"></span>

    0 讨论(0)
  • 2020-12-06 02:38

    This code will help you deal with the issue of handling multiple timer on the single page

        var seconds_inputs =  document.getElementsByClassName('deal_left_seconds');
        var total_timers = seconds_inputs.length;
        for ( var i = 0; i < total_timers; i++){
            var str_seconds = 'seconds_'; var str_seconds_prod_id = 'seconds_prod_id_';
            var seconds_prod_id = seconds_inputs[i].getAttribute('data-value');
            var cal_seconds = seconds_inputs[i].getAttribute('value');
    
            eval('var ' + str_seconds + seconds_prod_id + '= ' + cal_seconds + ';');
            eval('var ' + str_seconds_prod_id + seconds_prod_id + '= ' + seconds_prod_id + ';');
        }
        function timer() {
            for ( var i = 0; i < total_timers; i++) {
                var seconds_prod_id = seconds_inputs[i].getAttribute('data-value');
    
                var days = Math.floor(eval('seconds_'+seconds_prod_id) / 24 / 60 / 60);
                var hoursLeft = Math.floor((eval('seconds_'+seconds_prod_id)) - (days * 86400));
                var hours = Math.floor(hoursLeft / 3600);
                var minutesLeft = Math.floor((hoursLeft) - (hours * 3600));
                var minutes = Math.floor(minutesLeft / 60);
                var remainingSeconds = eval('seconds_'+seconds_prod_id) % 60;
    
                function pad(n) {
                    return (n < 10 ? "0" + n : n);
                }
                document.getElementById('deal_days_' + seconds_prod_id).innerHTML = pad(days);
                document.getElementById('deal_hrs_' + seconds_prod_id).innerHTML = pad(hours);
                document.getElementById('deal_min_' + seconds_prod_id).innerHTML = pad(minutes);
                document.getElementById('deal_sec_' + seconds_prod_id).innerHTML = pad(remainingSeconds);
    
                if (eval('seconds_'+ seconds_prod_id) == 0) {
                    clearInterval(countdownTimer);
                    document.getElementById('deal_days_' + seconds_prod_id).innerHTML = document.getElementById('deal_hrs_' + seconds_prod_id).innerHTML = document.getElementById('deal_min_' + seconds_prod_id).innerHTML = document.getElementById('deal_sec_' + seconds_prod_id).innerHTML = pad(0);
                } else {
                    var value = eval('seconds_'+seconds_prod_id);
                    value--;
                    eval('seconds_' + seconds_prod_id + '= ' + value + ';');
                }
            }
        }
    
        var countdownTimer = setInterval('timer()', 1000);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <input type="hidden" class="deal_left_seconds" data-value="1" value="10">
    <div class="box-wrapper">
        <div class="date box"> <span class="key" id="deal_days_1">00</span> <span class="value">DAYS</span> </div>
    </div>
    <div class="box-wrapper">
        <div class="hour box"> <span class="key" id="deal_hrs_1">00</span> <span class="value">HRS</span> </div>
    </div>
    <div class="box-wrapper">
        <div class="minutes box"> <span class="key" id="deal_min_1">00</span> <span class="value">MINS</span> </div>
    </div>
    <div class="box-wrapper hidden-md">
        <div class="seconds box"> <span class="key" id="deal_sec_1">00</span> <span class="value">SEC</span> </div>
    </div>

    0 讨论(0)
提交回复
热议问题