bugfix> php > 投稿

オンライン試験用にPHPでダウンカウンターを作成する方法とカウンターが0に達した後、自動的に試験を終了する必要があります可能であればこれらのコードを使用できますか教えてください

   <!-- Display the countdown timer in an element -->
<p id="demo"></p>
<script>
// Set the date we're counting down to
var countDownDate = new Date("Sep 5, 2018 15:37:25").getTime();
// Update the count down every 1 second
var x = setInterval(function() {
  // Get todays date and time
  var now = new Date().getTime();
  // Find the distance between now an the count down date
  var distance = countDownDate - now;
  // Time calculations for days, hours, minutes and seconds
  var days = Math.floor(distance / (1000 * 60 * 60 * 24));
  var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
  var seconds = Math.floor((distance % (1000 * 60)) / 1000);
  // Display the result in the element with id="demo"
  document.getElementById("demo").innerHTML = days + "d " + hours + "h "
  + minutes + "m " + seconds + "s ";
  // If the count down is finished, write some text 
  if (distance < 0) {
    clearInterval(x);
    document.getElementById("demo").innerHTML = "EXPIRED";
  }
}, 1000);
</script>

回答 2 件
  • あなたのコメントで述べたように、データベースから日付を取得する必要があるので、フィールドに保存してスクリプトで取得するだけです

    <input type="hidden" id="dateFromDB" value="<?php echo $dateFromDB;?>">
    
    

    質問でデータベースについて何も言及していないため、データベースから日付を取得する方法を伝えることはできません。しかし、あなたがその方法を知っていることを願っています。したがって、 $dateFromDB に保存するだけです 。こんな感じ

    var dateDB = document.getElementById("dateFromDB").val();
    
    

    そして、 dateDB を使用します  静的な日付の代わりに

    var countDownDate = new Date(dateDB).getTime();
    
    

  • strtotime関数を使用して日付を取得します。

    $date = strtotime("Sep 5, 2018 15:37:25");
    $remaining = $date - time();
    
    

    次に、$remainingは残りの秒数です。次に、その数を分割して、日数、時間数、分数などを取得できます。

    $daysRemaining = floor($remaining / 86400);
    $hoursRemaining = floor(($remaining % 86400) / 3600);
    
    

    これをJavaScript関数に入れると、次のようになります。

    <script>
        setInterval(function() {
            <?php
             /*
            It is important that the date field in the database is the proper datatype,
            i.e. DATETIME.
            The 'date' in this select statement is your date field
            The where clause is the condition of a specific selection in your table
            You then replace the hardcoded date with the data stored as a php variable
            */
            $sql = "SELECT date FROM table WHERE something='something'";
            $result = mysql_query($sql);
            $dateData = mysql_fetch_array($result)[0];
            $date = strtotime("".$dateData."");
            $remaining = $date - time();
            $daysRemaining = floor($remaining / 86400);
            $hoursRemaining = floor(($remaining % 86400) / 3600);
            ?>
            var days = <?php echo $daysRemaining; ?>;
            var hours = <?php echo $hoursRemaining; ?>;
            <?php
            if($remaining <= 0) {
                ?>
                document.getElementById("demo").innerHTML = "EXPIRED";
                <?php
            }else {
                ?>
                document.getElementById("demo").innerHTML = days + "d " + hours + "h ";
                <?php
            }
            ?>
        }, 1000);
    </script>
    
    

    編集:

    データベースの日付が必要であることを確認したら、編集済みの回答を参照してください。 mysqliまたはPDO構文のいずれかを使用する場合は、mysql構文を変更してください。 mysql_が原因でmysqli_またはPDOをまだ使用していない場合は、使用することをお勧めします 非推奨です。

    お役に立てれば。

    しかし質問。検査時間を知っている場合、単にその時間を使用するのをやめるにはどうすればよいですか?とにかく、データベースから日付を取得する方法を示しました。

あなたの答え