1

オークションサイトのタイマーを作ろうとしています。

各製品には という特定の終了日があり、ファイルTargetDateに入力されていTimerInput.phpます。
これらの値はTimerOutput.phpファイルに投稿され、製品が表示され、タイマーのカウントダウンが終了日まで続きます。

counter > 15ユーザーが入札ボタンをクリックするたびに、タイマーは通常どおりカウントダウンを続けます。
しかし、counter < 15入札をクリックするたびTargetDateに、ボタンが押されたときに関連する特定の値だけ延長することで、タイマーが 15 にリセットされます。

まず、[入札] ボタンが機能していなかったため、代わりにページを更新することで関数が呼び出されました。
タイマーが 15 未満の場合、ページを更新すると、本来TargetDateあるべきように延長され、タイマーは 15 にリセットされます。
しかし、問題は、最初TargetDateTimerInput.phpファイルに最初に入力された時間に達すると、入札は終了しますが、別の時間が表示されます。コードの実行中は、日付が更新されていることを示しています。

PHPコードを単独で実行し、を使用して表示することで機能しようとしましたJavascript
次に、コードを実行しようとしましたがJavascript、最後に日付を外部ファイルに書き込んで再度読み取ろうとしましたが、結果はありませんでした。

事前に助けてくれてありがとう。

これが私のコードです:

TimerOutput.php:

<?php

// target date entered by user
$TargetDate = $month."/".$day."/".$year." ".$hour.":".$minute.":".$second." ".$hourclock;

// change target date to unix timestamp format
$UnixTargetDate = strtotime($month."/".$day."/".$year." ".$hourHC.":".$minute.":".$second);

// unix timestamp right now
$unixtime = strtotime("now");
}


?>

<script language="JavaScript">
//TargetDate = "7/30/2012 13:32";
ForeColor = "navy";
CountActive = true;
CountStepper = -1;
LeadingZero = true;
DisplayFormat = "%%H%%:%%M%%:%%S%%";
FinishMessage = "Sold at: "


    // extract timer variables inputs
    var unixNow = parseInt("<?php echo $unixtime?>");
    var unixTarget = parseInt("<?php echo $UnixTargetDate?>");


function AdditionalSecond()
{

    if ((unixTarget - unixNow)>0 && (unixTarget - unixNow)<15)
    {
        // reset timer to 15s
        // update target date
        unixTarget = unixTarget + 15 - (unixTarget - unixNow);

    }
    else if ((unixTarget - unixNow)>15)
    {
        // do nothing continue countdown normally
        unixTarget=unixTarget;

    }
    else
    {
        // display that item is sold when time is up
        FinishMessage
    }

}

// call function AdditionalSecond() to be executed  
AdditionalSecond();

// create a new javascript Date object based on the timestamp
// multiplied by 1000 so that the argument is in milliseconds, not seconds
var date = new Date(unixTarget*1000);

// month part from the timestamp
var months = date.getMonth()+1;
// day part from the timestamp
var days = date.getDate();
// year part from the timestamp
var years = date.getFullYear();
// hours part from the timestamp
var hours = date.getHours();
// minutes part from the timestamp
var minutes = date.getMinutes();
// seconds part from the timestamp
var seconds = date.getSeconds();


// will display time in 10:30:23 format
TargetDate = months + '/' + days + '/' + years + ' ' + hours + ':' + minutes + ':' + seconds;

</script>
<div id="countTimer" name="countTimer" style="margin-left:100px;">
<script language="JavaScript" src="countdown.js"></script>
</div>
<div id = "soldtime" style = "margin-left:100px;">
<span id="timedispspan"></span>
</div>
<div id = "bottom" style = "margin-left:100px;">
<form name="BidForm" id="BidForm" onsubmit="return false">
<input type="button" value="Bid" onclick="AddSecond();" style = "width:100px;height:30px;">
</form>
</div>
</body>
</html>

カウントダウン.js:

function calcage(secs, num1, num2) {
  s = ((Math.floor(secs/num1))%num2).toString();
  if (LeadingZero && s.length < 2)
    s = "0" + s;
  return "<b>" + s + "</b>";
}

function refreshDiv(){    
        document.getElementById("cntdwn").innerHTML = DisplayStr;  
    }

function CountBack(secs) {
  if (secs < 0) {

    document.getElementById("cntdwn").innerHTML = FinishMessage;
    return;
  }



  DisplayStr = DisplayFormat.replace(/%%D%%/g, calcage(secs,86400,100000));
  DisplayStr = DisplayStr.replace(/%%H%%/g, calcage(secs,3600,24));
  DisplayStr = DisplayStr.replace(/%%M%%/g, calcage(secs,60,60));
  DisplayStr = DisplayStr.replace(/%%S%%/g, calcage(secs,1,60));

  document.getElementById("cntdwn").innerHTML = DisplayStr;
  if (CountActive)
    setTimeout("CountBack(" + (secs+CountStepper) + ")", SetTimeOutPeriod);
}

function putspan(backcolor, forecolor) {
 document.write("<span id='cntdwn' style='background-color:" + backcolor + 
                "; color:" + forecolor + "'></span>");
}

if (typeof(BackColor)=="undefined")
  BackColor = "white";
if (typeof(ForeColor)=="undefined")
  ForeColor= "black";
if (typeof(TargetDate)=="undefined")
  TargetDate = "12/31/2012 5:00 AM";
if (typeof(DisplayFormat)=="undefined")
  DisplayFormat = "%%D%% Days, %%H%% Hours, %%M%% Minutes, %%S%% Seconds.";
if (typeof(CountActive)=="undefined")
  CountActive = true;
if (typeof(FinishMessage)=="undefined")
  FinishMessage = "";
if (typeof(CountStepper)!="number")
  CountStepper = -1;
if (typeof(LeadingZero)=="undefined")
  LeadingZero = true;


CountStepper = Math.ceil(CountStepper);
if (CountStepper == 0)
  CountActive = false;
var SetTimeOutPeriod = (Math.abs(CountStepper)-1)*1000 + 990;
putspan(BackColor, ForeColor);
var dthen = new Date(TargetDate);
var dnow = new Date();
if(CountStepper>0)
  ddiff = new Date(dnow-dthen);
else
  ddiff = new Date(dthen-dnow);

gsecs = Math.floor(ddiff.valueOf()/1000);
CountBack(gsecs);
4

0 に答える 0