以前にも似たような質問をさせて頂きました。現在新たな問題があります。このプログラムの挙動としてはオークションの終了時間をDBから取得し(現在はテストのため手打ち)残り時間を表示させ、1時間を切っていれば1秒更新でタイマーを表示するというプログラムです。残り時間が0になればJSにて'このオークションは終了しました'と表示させ、ページに来た時点で終了していればPHPで同じ文字を表示します。
問題(例)
現在時刻(仮)2019年1月31日20時30分00秒
手打ち時間(仮)2019年1月31日20時31分00秒
現在時刻が上記のとき手打ち時間を上記のようにすると、きちんと1秒カウントダウンが表示され時間が0になると'このオークションは終了しました'と表示されます。しかしこの段階でページ更新をすると、本来はint(1)のところに入るはずですが、int(0)の部分の'このオークションは終了しました'が表示されます。残り時間がきた後にページを読み込むのですから、また上から手打ち時間を読み込み、それがすでに過去になっているはずなので、$endがtrueになると思ったのですが何故そのように動かないのでしょうか。
PHP
1<?php 2//手打ち時間 3$end = false; 4$year = 2019; 5$month = 1; 6$day = 31; 7$hour = 22; 8$minute = 54; 9$second = 00; 10$month1 = 0; 11$datetime = new DateTime("$year/$month/$day $hour:$minute:$second"); 12$current = new DateTime('now'); 13$diff= $current->diff($datetime); 14var_dump($diff); 15if ($diff ->invert == 1) { 16 $end = true; 17} 18 19?> 20 21<!DOCTYPE html> 22<html lang="en" dir="ltr"> 23 24<head> 25 <meta charset="utf-8"> 26 <title></title> 27 <link rel="stylesheet" href="styles.css"> 28 <script src="../Shopping/jquery-3.3.1.min.js"></script> 29</head> 30 31<body> 32 33 <div class="dobid"> 34 35 <?php if ($end == false): ?> 36 <!-- 確認のvar_dump --> 37 <?php var_dump(0); ?> 38 <div class="bid"> 39 <a href="#">入札する</a> 40 <span class="time">残り</span> 41 </div> 42 43 <p id="clone">このオークションは終了しました</p> 44 45 <?php elseif ($end == true): ?> 46 <!-- 確認のvar_dump --> 47 <?php var_dump(1); ?> 48 <p>このオークションは終了しました</p> 49 50 <?php endif ?> 51 52 </div> 53 54</body> 55 56<script> 57 var end = '<?php echo $end; ?>'; 58 var year = '<?php echo $year; ?>'; 59 var month = '<?php echo $month; ?>'; 60 var day = '<?php echo $day; ?>'; 61 var hour = '<?php echo $hour; ?>'; 62 var minute = '<?php echo $minute; ?>'; 63 64 var cutoff = new Date(); 65 cutoff.setFullYear(year); 66 cutoff.setMonth(month - 1); 67 cutoff.setDate(day); 68 cutoff.setHours(hour); 69 cutoff.setMinutes(minute); 70 cutoff.setSeconds(00); 71 72 var countdown = function(cutoff) { 73 var now = new Date(); 74 var rest = cutoff.getTime() - now.getTime(); 75 var sec = Math.floor(rest / 1000) % 60; 76 var min = Math.floor(rest / 1000 / 60) % 60; 77 var hours = Math.floor(rest / 1000 / 60 / 60) % 24; 78 var days = Math.floor(rest / 1000 / 60 / 60 / 24); 79 var count = [days, hours, min, sec]; 80 return count; 81 } 82 83 var recalc = function() { 84 var count = countdown(cutoff); 85 if (count[2] < 0) { 86 $('.bid').hide(); 87 $('#clone').fadeIn(); 88 } else { 89 var time = count[1] + '時間' + count[2] + '分' + count[3] + '秒'; 90 $('.time').text(time); 91 refresh(); 92 } 93 } 94 95 var refresh = function() { 96 setTimeout(recalc, 1000); 97 } 98 99 if (end == false) { 100 var count = countdown(cutoff); 101 102 if (count[2] < 0) { 103 $('.bid').hide(); 104 $('#clone').fadeIn(); 105 } else if (count[1] < 1) { 106 recalc(); 107 } else { 108 var time = count[1] + '時間' + count[2] + '分' + count[3] + '秒'; 109 $('.time').text(time); 110 } 111 } 112</script> 113 114</html>
回答1件
あなたの回答
tips
プレビュー