Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

236
Views
React Countdown Timer Padding Not Working

I have a working countdown timer & have added an if statement to address adding a preceding zero to hours, minutes, and seconds when less than 10; however, single digits are still showing up without the padding. Can you please let me know what I did wrong with my if statement or use of this.state?

import React,{Component} from "react";

class Countdown extends Component{
    constructor(props){
        super(props);
            this.state={
            hours:"00",
            minutes:"00",
            seconds:"00"
           }   
        }

        componentDidMount(){
            let countDownDate = new Date();
             countDownDate.setHours(24,0,0,0);
           
             setInterval(
                function () {
                  let now = new Date().getTime();
                  let timeleft = countDownDate - now;
                  this.setState({
                    hours: Math.floor((timeleft % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)),
                    minutes: Math.floor((timeleft % (1000 * 60 * 60)) / (1000 * 60)),
                    seconds: Math.floor((timeleft % (1000 * 60)) / 1000)
                  });
                }.bind(this), // we added the binding here
                1000
              );

                      
          if (this.state.hours < 10) {
            this.state.hours = "0"+this.state.hours;
        }
                  if (this.state.minutes < 10) {
            this.state.minutes = "0"+this.state.minutes;
          }
                  if (this.state.seconds < 10) {
            this.state.seconds = "0"+this.state.seconds;
        }
        }
   
         render(){    
    return (
        <>
        <div className="countdown-timer">
        <div className = "countdown-text">
          <p>DEAL ENDS<br></br> Hrs: Min: Sec:</p>
        </div>
        <div className="countdown-time">
        <p>{this.state.hours}:{this.state.minutes}:{this.state.seconds} </p>
            </div>
        </div>
        </>
        )
        }
    
}

export default Countdown;
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

You cannot change the value of state directly, this will not re render the react component, you should change the state value using this.setState only, below you will find the modified code, which you can check.

    import React,{Component} from "react";

class Countdown extends Component{
    constructor(props){
        super(props);
            this.state={
            hours:"00",
            minutes:"00",
            seconds:"00"
           }   
        }

        componentDidMount(){
            let countDownDate = new Date();
             countDownDate.setHours(24,13,0,0);
           
             setInterval(
                function () {
                  let now = new Date().getTime();
                  let timeleft = countDownDate - now;
                  const hour = Math.floor((timeleft % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
                  const minutes = Math.floor((timeleft % (1000 * 60 * 60)) / (1000 * 60));
                  const seconds = Math.floor((timeleft % (1000 * 60)) / 1000);
                  this.setState({
                    hours: hour >= 10 ? hour : "0" + hour,
                    minutes: minutes >= 10 ? minutes : "0" + minutes,
                    seconds: seconds >= 10 ? seconds : "0" + seconds,
                  });
                }.bind(this), // we added the binding here
                1000
              );

                      
        }
   
         render(){    
    return (
        <>
        <div className="countdown-timer">
        <div className = "countdown-text">
          <p>DEAL ENDS<br></br> Hrs: Min: Sec:</p>
        </div>
        <div className="countdown-time">
        <p>{this.state.hours}:{this.state.minutes}:{this.state.seconds} </p>
            </div>
        </div>
        </>
        )
        }
    
}

export default Countdown;
about 4 years ago · Juan Pablo Isaza Report

0

There is no need to add if statements. Just check the conditions in your JSX expression itself like this: <p>{this.state.hours < 10 ? "0" + this.state.hours : this.state.hours} : {this.state.minutes < 10 ? "0" + this.state.minutes : this.state.minutes : {this.state.seconds < 10 ? "0" + this.state.seconds : this.state.seconds}</p>. It should work, tested. Link to working sandbox

Your resulting code below:

import React, { Component } from "react";

class Countdown extends Component {
  constructor(props) {
    super(props);
    this.state = {
      hours: "00",
      minutes: "00",
      seconds: "00"
    };
  }

  componentDidMount() {
    let countDownDate = new Date();
    countDownDate.setHours(24, 0, 0, 0);

    setInterval(
      function () {
        let now = new Date().getTime();
        let timeleft = countDownDate - now;
        this.setState({
          hours: Math.floor(
            (timeleft % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)
          ),
          minutes: Math.floor((timeleft % (1000 * 60 * 60)) / (1000 * 60)),
          seconds: Math.floor((timeleft % (1000 * 60)) / 1000)
        });
      }.bind(this), // we added the binding here
      1000
    );
  }

  render() {
    return (
      <>
        <div className="countdown-timer">
          <div className="countdown-text">
            <p>
              DEAL ENDS<br></br> Hrs: Min: Sec:
            </p>
          </div>
          <div className="countdown-time">
            <p>
              {this.state.hours < 10
                ? "0" + this.state.hours
                : this.state.hours}
              :
              {this.state.minutes < 10
                ? "0" + this.state.minutes
                : this.state.minutes}
              :
              {this.state.seconds < 10
                ? "0" + this.state.seconds
                : this.state.seconds}{" "}
            </p>
          </div>
        </div>
      </>
    );
  }
}

export default Countdown;

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!