2016-08-24 7 views
1

私は毎月15日にカウントダウンを設定する必要があります。私は15日までのカウントダウンに必要な差分値を正常に取得できます。カウントダウンの値は0を返します

差を計算した後、日、時間、分、秒を計算します。日以外にも他の

すべてがこれを試す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

ないこの問題を解決するにはいますが、Moment.jsに見ることができる、それはより多くの方が簡単ですネイティブのDate()クラスを使用して作業します。 http://momentjs.com/ – jered

+0

間違いなくこの瞬間を使用 – John

+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}; 
} 
関連する問題