Есть следующий скрипт :
timeend= new Date(2017,08,4,2,48);
function time() {
today = new Date();
today = Math.floor((timeend-today)/1000);
tsec=today%60; today=Math.floor(today/60); if(tsec<10)tsec=+'0'+tsec;
tmin=today%60; today=Math.floor(today/60); if(tmin<10)tmin='0'+tmin;
thour=today%24; today=Math.floor(today/24);
timestr=today +" д. "+ thour+":"+tmin+":"+tsec+"";
document.getElementById('timer').innerHTML=timestr;
if(today != 0 || thour != 0 || tmin != 0 || tsec != 0 ){
window.setTimeout("time()",1000);
}
}
$(document).ready(time());
Но мне надо , сделать отсчёт учитывая время сервера , а не браузера. Вставил в New Date данные сервера. :
timeend= new Date(2017,08,4,2,48);
function time() {
today = new Date(<?php Print(date('Y')) ?>,<?php Print(date('m')) ?>-1,<?php Print(date('d')) ?>,<?php Print(date('H')) ?>,<?php Print(date('i')) ?>);
today = Math.floor((timeend-today)/1000);
tsec=today%60; today=Math.floor(today/60); if(tsec<10)tsec=+'0'+tsec;
tmin=today%60; today=Math.floor(today/60); if(tmin<10)tmin='0'+tmin;
thour=today%24; today=Math.floor(today/24);
timestr=today +" д. "+ thour+":"+tmin+":"+tsec+"";
document.getElementById('timer').innerHTML=timestr;
if(today != 0 || thour != 0 || tmin != 0 || tsec != 0 ){
window.setTimeout("time()",1000);
}
}
$(document).ready(time());
На выходе получаю в обоих случаях объекты , но всё равно не работает.
Вообще надо один раз получать от сервера и потом уже на локалке отсчитывать , но лень заморачиваться , если есть у кого-нибудь готовый код или решение данного случая , помогите пожалуйста.
Проблема в том, что new Date()
возвращает объект, содержащий местное время браузера. Чтобы такого не случилось, надо внести в создаваемый объект разницу между временем сервера и клиента (увы, точность будет хромать из-за немгновенной передачи кода на клиент, и ещё надо убедиться, что кеширование выключено, или время будет уезжать).
Ещё могут быть проблемы с часовыми поясами.
Этот код будет брать время сервера (не уверен, что часовые пояса будут считаться правильно)
<script type="text/javascript" src="http://code.jquery.com/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
var serverDateOffset = (new Date()).getTime() - <?=time()?>000;
var timeend = new Date(2017, 8, 6, 2, 48);
function time() {
var today = new Date((new Date()).getTime() - serverDateOffset);
today = Math.floor((timeend - today) / 1000);
var tsec = today % 60;
today = Math.floor(today / 60);
if (tsec < 10) tsec = +'0' + tsec;
var tmin = today % 60;
today = Math.floor(today / 60);
if (tmin < 10) tmin = '0' + tmin;
var thour = today % 24;
today = Math.floor(today / 24);
var timestr = today + " д. " + thour + ":" + tmin + ":" + tsec + "";
document.getElementById('timer').innerHTML = timestr;
if (today != 0 || thour != 0 || tmin != 0 || tsec != 0) {
window.setTimeout(time, 1000);
}
}
$(document).ready(time);
</script>
<div id="timer"></div>
Не забыть подключить jquerry
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
Переменная загрузки страницы в php. Если нужен начальный отсчет, то можно ввести нули. в php epoch идет 7-значный, в js 10 знаков.
<?php
$time = $_SERVER['REQUEST_TIME'];
?>
Элемент html куда вставить время на сайте, можно заполнить его переменной php, на случай если js отключен.
<span id="time_from_js"><?php echo 'GMT '.gmdate('M:d, H:i', $time); ?></span>
Функция js, которая переводит timestamp в читабельный вид и заменяет элемент html на локальное время браузера.
<script>
$(document).ready(function func(timestamp) {
epoch = <?php echo json_encode($time); ?>;
var d = new Date(epoch * 1000),
yyyy = d.getFullYear(),
mm = ('0' + (d.getMonth() + 1)).slice(-2),//вставлять ли 0 перед числом
dd = ('0' + d.getDate()).slice(-2),
hh = ('0' + d.getHours()).slice(-2),
h = hh,
min = ('0' + d.getMinutes()).slice(-2),
sc = (d.getSeconds()),
ampm = 'AM',
time;
switch (mm)//на случай, если нужны месяцы в буквах..
{
case '01': mm = 'Jan';break;
case '02': mm = 'Feb';break;
case '03': mm = 'Mar';break;
case '04': mm = 'Apr';break;
case '05': mm = 'May';break;
case '06': mm = 'Jun';break;
case '07': mm = 'Jul';break;
case '08': mm = 'Aug';break;
case '09': mm = 'Sep';break;
case '10': mm = 'Oct';break;
case '11': mm = 'Nov';break;
case '12': mm = 'Dec';break;
default:;
};//end switch
if (hh > 12) { //формат 12 или 24
h = hh - 12;
ampm = 'PM';
} else if (hh === 12) {
h = 12;
ampm = 'PM';
} else if (hh == 0) {
h = 12;
}
time = mm + ', ' + dd + ', ' + hh + ':' + min + ':' + sc;//формат вывода
document.getElementById("time_from_js").innerHTML = time;
});
</script>
Получаем время отправления запроса php в локальном времени пользователя.
Попробуйте так:
function time(endtime) {
var date = new Date(),
newdate = new Date(endtime),
time = (newdate.getTime() - date.getTime());
//дальше рассчет по дням, часам, минутам, секундам и т.д.
}
ОБращаться к функции так:
time('<?=time()?>');
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть примерно такой кодВ php-обработчике идет запрос в БД: если такая запись уже есть, то echo 'no' и alert, что такой чек уже зарегистрирован
Привет ребята как в yii2 реализовывается вид товара плитка, таблица и список, как правильно сформировать ссылку
Пытаюсь интегрировать PayPal с сайтом на Yii2Использую Sandbox для тестирования