PHP変数$endがfalseであれば入札するボタンを、
trueであれば'このオークションは終了しました'と表示させたいです。
先にPHPで締め切り時間をとってきます。その時点で過去であれば挙動は問題ないのですがJSで残り時間が0になると
location.reloadのところに行かずに、また残り23時間59分59秒と新たにカウントダウンが始まってしまいます。どこが問題でしょうか。
【追記】
また残り23時間59分59秒と新たにカウントダウンが始まってしまいます
これについてですが、このプログラムの制御は残り時間が1時間を切ったら1秒更新でタイマーを切り替えています。
残り時間が0秒になり、新たに残り23時間59分59秒と新たにカウントダウンが始まって場合は1秒更新でプログラムが動いているので制御はできていると思うのですが、コンソールすると時間にマイナス表記がありません。なぜでしょうか。
<?php $end = false; $year = 2019; $month = 01; $day = 20; $hour = 19; $minute = 37; $second = 00; $datetime = new DateTime("$year/$month/$day $hour:$minute:$second"); $current = new DateTime('now'); $diff= $current->diff($datetime); if ($diff ->invert == 1) { $end = true; } ?> <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title></title> <link rel="stylesheet" href=""> <script src="../Shopping/jquery-3.3.1.min.js"></script> </head> <body> <div class="dobid"> <?php if ($end == false): ?> <a href="#">入札する</a> <span>残り</span><span class="time"></span> <?php elseif ($end == true): ?> <p>このオークションは終了しました</p> <?php endif ?> </div> </body> <script> var end = '<?php echo $end; ?>'; var year = '<?php echo $year; ?>'; var month = '<?php echo $month; ?>'; var day = '<?php echo $day; ?>'; var hour = '<?php echo $hour; ?>'; var minute = '<?php echo $minute; ?>'; var cutoff = new Date(); cutoff.setFullYear(year); cutoff.setMonth(month); cutoff.setDate(day); cutoff.setHours(hour); cutoff.setMinutes(minute); cutoff.setSeconds(00); var countdown = function(cutoff) { var now = new Date(); var rest = cutoff.getTime() - now.getTime(); var sec = Math.floor(rest / 1000) % 60; var min = Math.floor(rest / 1000 / 60) % 60; var hours = Math.floor(rest / 1000 / 60 / 60) % 24; var days = Math.floor(rest / 1000 / 60 / 60 / 24); var count = [days, hours, min, sec]; return count; } var recalc = function() { var count = countdown(cutoff); if (count[2] < 0) { location.reload();//質問 } else { var time = count[1] + '時間' + count[2] + '分' + count[3] + '秒'; $('.time').text(time); refresh(); } } var refresh = function() { setTimeout(recalc, 1000); } if (end == false) { var count = countdown(cutoff); if (count[2] < 0) { location.reload();//質問 } else if (count[1] < 1) { recalc(); } else { var time = count[1] + '時間' + count[2] + '分' + count[3] + '秒'; $('.time').text(time); } } </script> </html>
回答3件
あなたの回答
tips
プレビュー