倒计时值返回0

时间:2016-08-24 21:22:28

标签: javascript reactjs

我必须将倒计时设定为每个月的15号。我能够成功获得倒数到15日所需的差值。

计算差异后,我计算天数,小时数,分数,秒数。

除了days之外的其他所有内容都返回值0

export default React.createClass({
  tick: function() {
    var currentDate = new Date();
    var date_till_15 = new Date();

    if (currentDate.getDate() < 15) {
      var days_till_15 = 15 - currentDate.getDate();
      date_till_15 = new Date(date_till_15.setDate(currentDate.getDate() + days_till_15 ));
    } else if(currentDate.getDate() > 15){
      date_till_15 = new Date(date_till_15.setMonth(currentDate.getMonth() + 1));
      date_till_15 = new Date(date_till_15.setDate(15));
    }

    var difference =  date_till_15 - currentDate;
    var daysLeft = 0, hoursLeft = 0, minutesLeft = 0, secondsLeft = 0;

    if (difference > 0) {
      daysLeft = Math.floor( difference / (1000*60*60*24) );
      difference -= daysLeft * (1000*60*60*24);
      hoursLeft = Math.floor( difference / (1000*60*60) );
      difference -= hoursLeft * (1000*60*60);
      minutesLeft = Math.floor( difference / (1000*60) );
      difference -= minutesLeft * (1000*60);
      secondsLeft = Math.floor( difference/1000 );

      this.setState({
        days: daysLeft,
        hours: hoursLeft,
        minutes: minutesLeft,
        seconds: secondsLeft
      });
    }   else {
      clearInterval( this.timeInterval );
      this.setState({ expired: true });
    }
  },

  componentDidMount: function(){
    this.timeInterval = setInterval( this.tick.bind(this), 1000);
  },

  render() { 
    return (
      <div>
        {this.state &&
          <div>
            <div>{this.state.days}</div>
            <div>{this.state.minutes}</div>
          </div>
        }
      </div>
    )
  }
});

1 个答案:

答案 0 :(得分:0)

试试这个:

console.log(getTimeToNext(15));

function getTimeToNext(dayOfMonth) {
var currentDate = new Date();
var target;
if (currentDate.getDate() < dayOfMonth) {
    target = new Date(
    currentDate.getFullYear(),
    currentDate.getMonth(), 
    dayOfMonth, 0, 0, 0, 0);
} else {
    var currentMonth = currentDate.getMonth();
    if (currentMonth === 11) {
        target = new Date(
        currentDate.getFullYear() + 1,
      0, 
      dayOfMonth, 0, 0, 0, 0);
  } else {
        target = new Date(
        currentDate.getFullYear(),
      currentMonth + 1, 
      dayOfMonth, 0, 0, 0, 0);
  }
}

var delta = target - currentDate;
var daysLeft = Math.floor(delta/(1000*60*60*24));
delta -= daysLeft * (1000*60*60*24);
var hoursLeft = Math.floor(delta/(1000*60*60));
delta -= hoursLeft * (1000*60*60);
var minutesLeft = Math.floor(delta/(1000*60));
delta -= minutesLeft * (1000*60);
var secondsLeft = Math.floor(delta/(1000));

return {
    days: daysLeft,
  hours: hoursLeft,
  minutes: minutesLeft,
  seconds: secondsLeft};
}