Ходячие (тик-ток) часы с js и php - PullRequest
0 голосов
/ 10 сентября 2018

Есть скрипт с часами "walkin" на javascript и php (мне нужно время на стороне сервера - это важно), но он остановлен и не считается до тех пор, пока не обновит страницу. Что я делаю не так, пожалуйста, помогите. Спасибо.

<?php $Hour = date("H");
$Minute = date("i");
$Second = date("s");
$Day = date("d");
$Month = date("m"); ?>

<script type="text/javascript">
function clock() {
var d = new Date();
var month_num = d.getMonth();
var day = d.getDate();
var hours = <?php echo $Hour;?>;
var minutes = <?php echo $Minute;?>;
var seconds = <?php echo $Second?>;

month=new Array("января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря");

if (day <= 9) day = "0" + day;
if (hours <= 9) hours = "0" + hours;
if (minutes <= 9) minutes = "0" + minutes;
if (seconds <= 9) seconds = "0" + seconds;

date_time = "Today - " + day + " " + month[month_num] + " " + d.getFullYear() + " y. &nbsp;&nbsp;&nbsp;Now - "+ hours + ":" + minutes + ":" + seconds;

if (document.layers) {
 document.layers.doc_time.document.write(date_time);
 document.layers.doc_time.document.close();
} else document.getElementById("doc_time").innerHTML = date_time;
 setTimeout("clock()", 1000);}
</script>

<span id="doc_time">Date & time</span>

<script type="text/javascript">clock();</script>

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Ваша проблема:

  • PHP предоставляет по запросу страницы соответствующие значения даты.
  • Вы сохраняете эти значения в JS
  • Вы повторяете все те же значения.Следовательно, цикл работает, но значения остаются неизменными.

Вместо того, что вы должны:

  • Создать var D = new Date("<?php echo date('D M d Y H:i:s O');?>");
    вне вашей функции .
  • При каждом тайм-ауте добавляйте одну секунду к вашей начальной дате PHP
    DATE = PHP:initial + JS:now - JS:initial

function zero(n) { return n > 9 ? n : "0" + n; }
var months = [
  "января", "февраля", "марта", "апреля", "мая", "июня",
  "июля", "августа", "сентября", "октября", "ноября", "декабря",
];
var jsDate = new Date(); // Store JS time

// I'll hardcode a date string for demo purpose:
var phpDate = new Date("Sun Sep 09 2018 23:59:55 +0000");
// You, use this instead:
// var phpDate = new Date("<?php echo date('D M d Y H:i:s O');?>");

function clock() {
  var diff = +new Date() - +jsDate;     // Get seconds difference
  var date = new Date(+phpDate + diff); // Add difference to initial PHP time

  var y = date.getFullYear(),
    M = date.getMonth(),
    d = zero(date.getDate()),
    h = zero(date.getHours()),
    m = zero(date.getMinutes()),
    s = zero(date.getSeconds());

  document.getElementById("doc_time").innerHTML = `
    Дата: ${d} ${months[M]} ${y}. &emsp;
    Время: ${h}:${m}:${s}
  `;

  setTimeout(clock, 1000);
}

clock();
<div id="doc_time"></div>
0 голосов
/ 10 сентября 2018

PHP-код запускается один раз при загрузке страницы, поэтому часы, минуты и секунды всегда будут оставаться одинаковыми при каждом вызове функции clock ().

Если вам действительно нужно сделать такую ​​вещь, вы должны использовать AJAX для запроса php-скрипта каждую секунду, чтобы получать текущее время от сервера, но помните, что эти запросы будут иметь задержку, а также могут создать огромную нагрузку на сервер, если несколько пользователей открыть страницу одновременно.

...