Мне нужно добавить часы на веб-страницу. Часы должны быть синхронизированы с сервером, но я действительно не хочу, чтобы он постоянно проверял сервер, поскольку страница будет открыта 24/7 на нескольких ПК. Есть ли способ получить время с сервера, а затем использовать системные часы, чтобы обновлять их и проверять сервер каждые 15 минут или около того, чтобы синхронизировать его?
Часы на веб-странице с использованием сервера и системного времени?
Ответ 1
Как я уже говорил об этом раньше:
- Найдите время с сервера,
- Найдите время у клиента (сразу)
- Получить смещение.
- При показе часов применяйте смещение к текущему времени на клиенте.
Вам нужно обновлять это время от сервера.
Проблема, которую вы должны решить, заключается в том, что при получении запроса на получение времени с сервера будет отставание, прежде чем вы сможете получить время клиента. Вероятно, вы можете свести к минимуму это, используя запрос ajax, чтобы получить время сервера и ничего больше, тем самым сокращая служебные и сетевые задержки и т.д.
Ответ 2
+Date.now()
возвращает local ms с эпохи Unix. Итак:
- Получить время с сервера
- Рассчитать разницу между временем сервера и местным временем
- Обновляйте часы каждую секунду или минуту (в зависимости от того, что вы показываете), получая местное время и настраивая его с помощью разницы
- Каждые 15 минут обновляют разницу.
Или что-то в этом роде.
Здесь скрипка демонстрирует первый тайм:
var serverTime = 1310127993162; //this would come from the server obviously
var localTime = +Date.now();
var timeDiff = serverTime - localTime;
setInterval(function () {
console.log(+Date.now() + timeDiff);
}, 1000);
Ответ 3
Одна идея заключается в ответе на дату и время на странице, когда она запрашивается. как:
<html>
your serveside codes,
<script>
var serverdatetime = new Date("<%=Datetime.Now%>");
//use serverdatetime and update it after 15 mins.
// you can use ajax to get datetime
setTimeout(function(){
$.ajax({
url: 'http://yourhost.com/getdate',
success: function( data ) {
// use data and update serverdatetime
}
});},54000);
</script>
server codes
</html>
** примечание: это только идея, код может не работать
Ответ 4
Server Time: <input type="text" id="clock" value="" size='8'>
<script type="text/javascript">
var serverTime = <?php echo time() * 1000; ?>; //this would come from the server
var localTime = +Date.now();
var timeDiff = serverTime - localTime;
setInterval(function () {
var realtime = +Date.now() + timeDiff;
var date = new Date(realtime);
// hours part from the timestamp
var hours = date.getHours();
// minutes part from the timestamp
var minutes = date.getMinutes();
// seconds part from the timestamp
var seconds = date.getSeconds();
// will display time in 10:30:23 format
var formattedTime = hours + ':' + minutes + ':' + seconds;
$('#clock').attr('value',formattedTime); <-- input id=clock
}, 1000);
</script>
Ответ 5
Вы можете получить текущее время с сервера при каждой загрузке страницы, поэтому даже при первой загрузке вы будете иметь текущее время сервера. После этого вы можете использовать таймер javascript на странице, заданной для галочки каждую секунду, и тогда вы фактически будете синхронизировать часы с сервером. Вы также можете попробовать применить смещения, как было предложено, но я бы не рекомендовал, так как отставание во время обратной передачи.
Запрос Ajax может быть интересным вариантом.
Любые сомнения, вы также можете проверить это время!
Кроме того, W3Schools - отличная ссылка для javascript.
Ответ 6
<script>
var ctoday = <?php echo time() * 1000 ?>;
setInterval(function() {ctoday += 1000;},1000);
function startTime() {
var today = new Date(ctoday);
var montharray = new Array("Jan","Feb","Mar","Abr","May","Jun","Jul","Ogu","Sep","Oct","Nov","Des");
var h = today.getHours();
var ampm = h >= 12 ? 'PM' : 'AM';
h = h % 12;
h = h ? h : 12;
var m = today.getMinutes();
var s = today.getSeconds();
h = checkTime(h);
m = checkTime(m);
s = checkTime(s);
document.getElementById('txt').innerHTML =
checkTime(today.getDate())+" "+montharray[today.getMonth()]+" "+today.getFullYear() + " (" + ampm +" " + h + ":" + m + ":" + s +")";
setTimeout(startTime, 1000);
}
function checkTime(i) {
if (i < 10) {i = "0" + i};
return i;
}
</script>
<body onLoad="startTime();">
<span id="txt"></span>
</body>
- Создать переменную содержит время сервера, используя PHP.
- Добавляет 1000 к отметке времени каждые 1 сек (1000 = 1 с).
- Теперь вы получите часы.
- Теперь создайте новую дату с добавленной меткой времени.
- создает имена месяцев
- обнаружение AM или PM.
- конвертировать формат часов с 24 до 12
- Получение минут
- Получение секунд
- добавьте 0 строк, если количество часов меньше 10
- добавить 0 строк, если минуты менее 10
- добавить 0 строк, если секунды менее 10
- Теперь соедините все время и дату и поместите их в элемент DOM с идентификатором "txt"
- повторять функцию каждые 1 сек. Функция
- добавляет 0, чтобы привести числа < 10
Ответ 7
Попробуйте ввести код ниже:
var m_serverDateTime;
var currentOffsetedTime;
var diffMilliseconds;
$(document).ready(function () {
m_serverDateTime = getServerDateTime();/*your function to get server time
by ajax call */
diffMilliseconds = GetServerTimeDifference(m_serverDateTime);
});
function GetServerTimeDifference(serverdatetime) {
var fromdate = new Date();
var todate = new Date(serverdatetime);
var localdiffMilliseconds = todate - fromdate;
return localdiffMilliseconds;
}
setInterval(function () {
//var currentOffsetedTime = new Date().setMinutes(diffMinutes);
currentOffsetedTime = new Date();
currentOffsetedTime.setMilliseconds(diffMilliseconds);
$('#lblTimer').text(format(currentOffsetedTime, 'dd/MM/yyyy HH:mm'));
}, 1000);
Ответ 8
вы получаете только одно время с сервера, при загрузке вызываете этот метод и используете моменты js для даты формата:
var timeMiliSecond = new Date(serverTime).getTime();
callRepeatedly() {
setTimeout(() => {
timeMiliSecond = timeMiliSecond+1000;
serverTime=moment(newDate(timeMiliSecond)).format('MM-DD-YYYY HH:mm:ss');
this.callRepeatedly();
}, 1000)
}