2013-06-12 50 views
0

我有一個永久的倒計時器,我需要設置和我正在努力如何正確地做到這一點。如何使用php和ajax設置此倒計時?

我使用了一個名爲coutdown插件,它可以在這裏找到:

http://www.littlewebthings.com/projects/countdown/

所以我的設置到目前爲止,包括下面的代碼:

$(document).ready(function() { 
    $('#countdown_contain').countDown({ 
     targetDate: { 
      'day':  23, 
      'month': 6, 
      'year':  2013, 
      'hour':  12, 
      'min':  0, 
      'sec':  0 
     }, 
     omitWeeks: true 
    }); 
}); 

那麼,什麼是正在做的是計數直到2013年6月23日星期日。當它變爲零時,我需要重置,然後在兩週內開始倒計時。所以基本上我需要中午兩個星期的星期倒數計時器。

我的想法是,每次頁面加載時,可能會對php腳本進行一次ajax調用,以查看下一個倒計時日期,然後將響應填充到JS變量中,該變量將成爲插件使用的信息。也許那太多了?

我將如何構建我的PHP或JavaScript來實現我的目標?

回答

3

而不是ajax,我會創建一個計算下一個有效日期的JavaScript函數,並使用它來播種計數器時間。這樣,就沒有額外的服務器交互。

至於自動復位,可以使用onComplete事件補種控制。


要動態地構建targetDate結構,我會使用moment.js這樣做。請注意,這是我在工作期間在「非吸菸者的煙霧爆炸」期間編碼的理論,因此未經測試。請編輯,不要downvote,如果它不工作100%。

function getTargetDate() { 
    // initialize the static stuff... 
    var retval = { 'hour':12,'min':0,'sec':0 } 
    // good news! using Moment.js in the USA, Sunday is considered first day of week 
    // so all we have to do is calculate the correct week number... 
    var currentWeekOfYear = moment().week(); 
    // assume that we're targeting odd weeks, so 
    // if it's odd, add 2, if it's even, add 1 
    var nextTargetWeek = currentWeekOfYear; 
    if(currentWeekOfYear % 2 == 0) { 
     nextTargetWeek += 1; 
    } else { 
     nextTargetWeek += 2; 
    } 

    var nextTarget = moment().week(nextTargetWeek); 

    // moment retains the current day, so we need to set it to sunday. 
    nextTarget = nextTarget.day(0); 

    // now, enrich the return value 
    retval.day = nextTarget.date(); 
    retval.month = nextTarget.month(); 
    retval.year = nextTarget.year(); 

    return retval; 
} 
+0

作爲通過JS計算下一個有效日期的最佳方法,您能否提供任何見解?我也可以開始另外一個問題。 – absentx

+0

如果我用JavaScript完全解決了這個問題,那麼我會找到一個體面的javascript日期庫。 – JonnyS

+0

同意。正在研究一些和看moment.js – PaulProgrammer

1

這不是一個確切的答案,但它應該把你放在正確的軌道上。

你可以直接將變量回顯到你的javascript文件中。

$(document).ready(function() { 
$('#countdown_contain').countDown({ 
    targetDate: { 
     'day':  <?php echo(json_encode($day)); ?>, 
     'month': <?php echo(json_encode($month)); ?>, 
     'year':  <?php echo(json_encode($year)); ?>, 
     'hour':  <?php echo(json_encode($hour)); ?>, 
     'min':  <?php echo(json_encode($min)); ?>, 
     'sec':  <?php echo(json_encode($sec)); ?> 
    }, 
    omitWeeks: true 
}); 
}); 

在您的php腳本中,您可以使用strtotime()來計算下一個目標日。