Fulufhelo Praise Munyai Ответов: 2

Таймер обратного отсчета PHP


я новичок в PHP, и у меня возникли проблемы с моим первым блоком кода, пожалуйста, помогите мне. У меня есть таймер обратного отсчета на моей странице, он правильно отображается в Chrome и firefox, но в IE и Safari он отображает "NaNd NaNh NaNm NaNs" pleae help

ниже приведен мой код, заранее благодарю вас.

Что я уже пробовал:

Counter is below <!-- Counter will be inside this div form1 -->
<div id="form<?php echo $row['id'];?>" style="color:green" class="form-
group">                      
              
		  
			  
</div>


<Script>
function createCountDown(elementId, date) 
{
    // Set the date we're counting down to
    var countDownDate = new Date(date).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);
	  
	  //Hint on converting from object to the string.
	  //var distance = Date.parse(countDownDate) - Date.parse(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(elementId).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(elementId).innerHTML = "ORDER EXPIRED";
      }
    }, 1000);
}
createCountDown('form<?php echo $row['id'];?>', "<?php echo $row['time_to_expire'] ;?>")
</Script>

Mohibur Rashid

попробовать это

countDownDate = новая дата ("2017-08-31T08:50:00Z").getTime();
alert("countDownDate : "+countDownDate)
now = new Date().getTime();
тревога(сейчас)
расстояние = (обратный отсчет) - (сейчас);
тревога(расстояние)

2 Ответов

Рейтинг:
1

Richard Deeming

яваскрипт Date конструктор, который принимает строку, довольно придирчив к формату этой строки. Различные браузеры имеют различную поддержку различных форматов. Большинство браузеров должны поддерживать форматы даты RFC2822 и ISO8601, но все остальное может вызвать проблемы.

Если формат строки, которую вы передаете конструктору, не поддерживается, то countDownDate переменная будет undefined Когда вы вычтете текущую дату, вы получите NaN.

Вам либо нужно убедиться, что дата отформатирована правильно:

createCountDown('form<?php echo $row['id'];?>', <?php echo date_format(date_create($row['time_to_expire']), 'c') ;?>)

Или используйте метку времени UNIX:
createCountDown('form<?php echo $row['id'];?>', <?php echo strtotime($row['time_to_expire']) ;?>)

Кроме того, если вы знаете формат даты, вы можете использовать Moment.js[^] чтобы разобрать его на клиенте.


Рейтинг:
0

Richard MacCutchan

Строка "NaN" означает "не число" и указывает, что вычисленное значение находится вне диапазона значений, которые могут существовать в системе. Вам нужно проверить наличие таких значений и заменить их нулем. Тот факт, что некоторые браузеры показывают его правильно, а некоторые нет, сводится к реализации в каждом браузере.