Можно ли использовать этот скрипт с серверным временем, а не клиентом. (Для проверки, прошло ли время). В настоящее время используется время клиента, и это проблема. (Может быть, с php ??)
<script> var end = new Date('02/19/2012 10:1 AM'); var _second = 1000; var _minute = _second * 60; var _hour = _minute * 60; var _day = _hour * 24; var timer; function showRemaining() { var now = new Date(); var distance = end - now; if (distance < 0) { clearInterval(timer); document.getElementById('countdown').innerHTML = 'EXPIRED!'; return; } var days = Math.floor(distance / _day); var hours = Math.floor((distance % _day) / _hour); var minutes = Math.floor((distance % _hour) / _minute); var seconds = Math.floor((distance % _minute) / _second); document.getElementById('countdown').innerHTML = days + 'days '; document.getElementById('countdown').innerHTML += hours + 'hrs '; document.getElementById('countdown').innerHTML += minutes + 'mins '; document.getElementById('countdown').innerHTML += seconds + 'secs'; } timer = setInterval(showRemaining, 1000); </script> <div id="countdown"></div>
Вы можете получить время от запроса ajax или использовать что-то вроде этого:
<?php $now = date('dm-Y'); $end= "01-01-2013" $date = strtotime($end) - strtotime($now); $days = date('d', $date); $monthes= date('m', $date); $years= date('Y', $date); ?> <script> var days = "<?= $days ?>"; var monthes= "<?= $monthes?>"; var years= "<?= $years?>"; document.getElementById('countdown').innerHTML = days+ ' days'; document.getElementById('countdown').innerHTML += monthes+ ' monthes'; document.getElementById('countdown').innerHTML += years+ ' years'; </script>
Ответ Puku вернет фиксированную дату, а не время сервера. Кажется, он исправил это.
Я предлагаю:
<script> var date = <? echo time(); ?>; // etc... </script>
Это позволит получить количество (серверных) секунд со времен Unix Unix IIRC и записать его в переменной «date» как int. Обратите внимание на все, что находится между <?
и ?>
является PHP и таким образом выполняется на сервере.
Примечание. Я не использовал сокращенный синтаксис, например puku. У меня его нет по умолчанию, и я не могу его изменить, поэтому я подумал, что было бы неплохо использовать эту нотацию для тех, кто с той же проблемой.
Нашел пример, похожий на Ajax на http://www.roseindia.net/ajax/ajax-first-example.shtml
[UPDATE] После комментариев, излагающих мой предыдущий пост, это не сработало, я просмотрел все и изменил JavaScript и PHP-файл (давая полный код сейчас). Этот код теперь работает. Я попытался сохранить его как можно более похожим на оригинальный пример и ранее предоставленную ссылку вместо оптимизации вещей (я оставлю это вам).
<script> var end = new Date('02/19/2014 10:1 AM'); var _second = 1000; var _minute = _second * 60; var _hour = _minute * 60; var _day = _hour * 24; var timer; var distance; function startShowRemaining(strnow) { var now = new Date(strnow); distance = end - now; //To prevent 1 sec. lag, we make first a direct call to showRemaining showRemaining(); //Then each second, we decrement count and show info timer = setInterval(countRemaining, 1000); } function countRemaining() { distance = distance - 1000; //we substract a second (1000 ms) with each call showRemaining(); } function showRemaining() { if (distance < 0) { clearInterval(timer); document.getElementById('countdown').innerHTML = 'EXPIRED!'; return; } var days = Math.floor(distance / _day); var hours = Math.floor((distance % _day) / _hour); var minutes = Math.floor((distance % _hour) / _minute); var seconds = Math.floor((distance % _minute) / _second); document.getElementById('countdown').innerHTML = days + ' days '; document.getElementById('countdown').innerHTML += hours + ' hrs '; document.getElementById('countdown').innerHTML += minutes + ' mins '; document.getElementById('countdown').innerHTML += seconds + ' secs'; } function postRequest(strURL) { var xmlHttp; if (window.XMLHttpRequest) { // Mozilla, Safari, ... var xmlHttp = new XMLHttpRequest(); } else if (window.ActiveXObject) { // IE var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlHttp.open('POST', strURL, true); xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4) { startShowRemaining(xmlHttp.responseText); } } xmlHttp.send(strURL); } postRequest('time.php'); </script> <div id="countdown"></div>
И создайте файл: time.php
<?php print date("d/m/YH:i:s"); ?>
PHP-файл вызывается один раз, чтобы получить текущую дату, тогда значение «distance» var уменьшается каждую секунду, чтобы предотвратить дальнейшие вызовы Ajax, которые используют полосу пропускания, и … может потребовать больше одной секунды. Используется другая функция для декрементирования, поэтому мы можем сразу вызвать showRemaining, не уменьшая ее (вы также можете начать увеличивать 1000 при первом вызове и использовать только одну функцию.).
В любом случае, я предпочитаю подход Puku просто использовать PHP для написания правильного значения для «now» var, это проще. Это хорошо только в качестве примера использования Ajax.