Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > Общие вопросы Web
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2017, 13:53   #1
Alex-2
Пользователь
 
Регистрация: 16.02.2017
Сообщений: 18
По умолчанию Таймер

Подскажите, как можно сделать так, чтобы таймер не был привязан ко времени компьютера?
Если у кого-то есть код, то поделитесь, пожалуйста.

Я имею в виду, что если добавить на сайт таймер и установить в нем дату его окончания.
К примеру, 7 марта в 20-00 он должен завершиться, начиная с текущего времени.
Допустим, что должно пройти 30 часов, но все таймеры привязываются ко времени моего компьютера.
Если я изменю время у себя на компе, то и время таймера поменяется.
Поставлю у себя часы на компе на 2 часа раньше и таймер будет работать не 30 часов, а 32 часа.

Проблема в том, что если такой таймер будет у меня на сайте, то любой человек, который откроет сайт, сможет изменить время этого таймера, если отрегулирует часы у себя на компьютере.
Возьмет и переведет часы вперед или назад.

Как можно привязать таймер к серверному времени?
Alex-2 вне форума Ответить с цитированием
Старый 06.03.2017, 14:25   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

а в чем собственно проблема?
где код или еще что?
вариантов море:
- например задаете жестко дату и время: $time = "2017-12-05 16:40"
или там как timestamp + 30*60*600
можете хранить в БД. можно просто в строке, можно в текстовике
непонятен ваш вопрос просто

и да, серверное время != времени вашего компа (если только он же и не является сервером)
а так - time() вот текущее серверное время
ADSoft вне форума Ответить с цитированием
Старый 06.03.2017, 21:54   #3
Alex-2
Пользователь
 
Регистрация: 16.02.2017
Сообщений: 18
По умолчанию

HTML:
Код:
<div id="timer_wrap">
		<div id="clock">
			<div id='day'>
				<div id="digit"><p id='day0'></p></div>
				<div id="digit"><p id='day1'></p></div>
			</div>
			<div id="razd">
				:
			</div>
			<div id='hour'>
				<div id="digit"><p id='hour0'></p></div>
				<div id="digit"><p id='hour1'></p></div>
			</div>
			<div id="razd">
				:
			</div>
			<div id='min'>
				<div id="digit"><p id='min0'></p></div>
				<div id="digit"><p id='min1'></p></div>
			</div>
			<div id="razd">
				:
			</div>
			<div id='sec'>
				<div id="digit"><p id='sec0'></p></div>
				<div id="digit"><p id='sec1'></p></div>
			</div>
		</div>		
	</div>

JS:
Код:
$(document).ready(function () {
//код jQuery

//функция вызова таймера
function get_timer() {
	
	//Дата для обратного отсчета
	var date_new = "May 22,2017 22:00";
	////////////////////////////////////
	////////////////////////////////////
	
	//Объект даты для обратного отсчета
	var date_t = new Date(date_new);
	//Объект текущей даты
	var date = new Date();
	//Вычисляем сколько миллисекунд пройдет 
	//от текущей даты до даты отсчета времени
	var timer = date_t - date;
	
	//Проверяем не нужно ли закончить отсчет
	//если дата отсчета еще не истекла, то количество
	//миллисекунд в переменной date_t будет больше чем в переменной date
	if(date_t > date) {
		
		//Вычисляем сколько осталось дней до даты отсчета.
		//Для этого количество миллисекунд до даты отсчета делим
		//на количество миллисекунд в одном дне
		var day = parseInt(timer/(60*60*1000*24));
		//если полученное число меньше 10 прибавляем 0
		if(day < 10) {
			day = '0' + day;
		}
		//Приводим результат к строке
		day = day.toString();
			
		//Вычисляем сколько осталось часов до даты отсчета.
		//Для этого переменную timer делим на количество
		//миллисекунд в одном часе и отбрасываем дни
		var hour = parseInt(timer/(60*60*1000))%24;
		//если полученное число меньше 10 прибавляем 0
		if(hour < 10) {
			hour = '0' + hour;
		}
		//Приводим результат к строке
		hour = hour.toString();
			
		//Вычисляем сколько осталось минут до даты отсчета.
		//Для этого переменную timer делим на количество
		//миллисекунд в одной минуте и отбрасываем часы
		var min = parseInt(timer/(1000*60))%60;
		//если полученное число меньше 10 прибавляем 0
		if(min < 10) {
			min = '0' + min;
		}
		//Приводим результат к строке
		min = min.toString();
			
		//Вычисляем сколько осталось секунд до даты отсчета.
		//Для этого переменную timer делим на количество
		//миллисекунд в одной минуте и отбрасываем минуты
		var sec = parseInt(timer/1000)%60;
		//если полученное число меньше 10 прибавляем 0
		if(sec < 10) {
			sec = '0' + sec;
		}
		//Приводим результат к строке
		sec = sec.toString(); 
		
			//Проверяем какие предыдущие цифры времени должны вывестись на экран
		//Для десятков дней
		if(day[1] == 9 && 
			hour[0] == 2 && 
			hour[1] == 3 && 
			min[0] == 5 && 
			min[1] == 9 && 
			sec[0] == 5 && 
			sec[1] == 9) {
			animation($("#day0"),day[0]);
		}
		else {
			$("#day0").html(day[0]);
		}
		//Для единиц  дней
		if(hour[0] == 2 && 
			hour[1] == 3 && 
			min[0] == 5 && 
			min[1] == 9 && 
			sec[0] == 5 && 
			sec[1] == 9) {
			animation($("#day1"),day[1]);
		}
		else {
			$("#day1").html(day[1]);
		}
		//Выводим часы
		//Проверяем какие предыдущие цифры времени должны вывестись на экран
		//Для десятков часов
		if(hour[1] == 3 && 
			min[0] == 5 && 
			min[1] == 9 && 
			sec[0] == 5 && 
			sec[1] == 9) {
			animation($("#hour0"),hour[0]);
		}
		else {
			$("#hour0").html(hour[0]);
		}
		//Для единиц часов	
		if(min[0] == 5 && 
			min[1] == 9 && 
			sec[0] == 5 && 
			sec[1] == 9) {
			animation($("#hour1"),hour[1]);
		}
		else {
			$("#hour1").html(hour[1]);
		}
			
		//Выводим минуты
		//Проверяем какие предыдущие цифры времени должны вывестись на экран
		//Для десятков минут
		if(min[1] == 9 && 
			sec[0] == 5 && 
			sec[1] == 9) {
			animation($("#min0"),min[0]);
		}
		else {
			$("#min0").html(min[0]);
		}
		//Для единиц минут
		if(sec[0] == 5 && sec[1] == 9) {
			animation($("#min1"),min[1]);
		}
		else {
			$("#min1").html(min[1]);
		}
			
		//Выводим секунды
		//Проверяем какие предыдущие цифры времени должны вывестись на экран
		//Для десятков секунд
		if(sec[1] == 9) {
			animation($("#sec0"),sec[0]);
		}
		//Для единиц секунд
		else {
			$("#sec0").html(sec[0]);
		}
		
		animation($("#sec1"),sec[1]);	
		//Периодически вызываем созданную функцию, 
		//интервал вызова одна секунда(1000 милли секунд)
		
			setTimeout(get_timer,1000);
	}
	else {
		$("#clock").html("<span id='stop'>Акция закончена!</span>");
	}
		
}

//Функция для красивого отображения времени.
function animation(vibor,param) {
	vibor.html(param)
		.css({'marginTop':'5px','opacity':'0'})
		.animate({'marginTop':'24px','opacity':'1'});
}

get_timer();

});
Вот такой код.

______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.
Alex-2 вне форума Ответить с цитированием
Старый 06.03.2017, 22:49   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

В JS, где у тебя //Объект текущей даты – нужно получить серверное время, примерно так:
Код:
//Объект текущей даты
var date = function () {
    var tmp = null;
    $.ajax({
        'async': false,
        'type': "POST",
        'global': false,
        'dataType': 'text',
        'url': "./js_time.php", // or your another URL
        'data': { 'get_time': 1, },
        'success': function (data) {
            tmp = new Date(data);
        }
    });
    return tmp;
}();
// you get something like this: Mon Mar 06 2017 21:49:00 GMT+0200 (EET)
js_time.php:
PHP код:
<?php
if(!empty($_POST['get_time'])){
    echo 
date('F j,Y H:i'); // March 6,2017 21:49
}
echo 
'';
?>

Последний раз редактировалось Andkorol; 06.03.2017 в 22:51.
Andkorol вне форума Ответить с цитированием
Старый 09.03.2017, 02:09   #5
Alex-2
Пользователь
 
Регистрация: 16.02.2017
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
В JS, где у тебя //Объект текущей даты – нужно получить серверное время, примерно так:
Код:
//Объект текущей даты
var date = function () {
    var tmp = null;
    $.ajax({
        'async': false,
        'type': "POST",
        'global': false,
        'dataType': 'text',
        'url': "./js_time.php", // or your another URL
        'data': { 'get_time': 1, },
        'success': function (data) {
            tmp = new Date(data);
        }
    });
    return tmp;
}();
// you get something like this: Mon Mar 06 2017 21:49:00 GMT+0200 (EET)
js_time.php:
PHP код:
<?php
if(!empty($_POST['get_time'])){
    echo 
date('F j,Y H:i'); // March 6,2017 21:49
}
echo 
'';
?>
Почему-то секунды не работают(
Сам таймер, вроде, работает, а вот секунды по нулям показывают.
Alex-2 вне форума Ответить с цитированием
Старый 09.03.2017, 09:28   #6
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

потому что так сам сказал программе
Код:
F j,Y H:i
надо секунды?
Код:
F j,Y H:i:s
ADSoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер на VB mallchel Помощь студентам 5 15.05.2013 20:52
Таймер Руслан(2) Общие вопросы C/C++ 0 05.06.2012 16:54
Таймер BaronVik C# (си шарп) 4 07.05.2012 10:05
Таймер vik85 Microsoft Office Excel 5 17.06.2010 07:10
Таймер Nitrino Общие вопросы C/C++ 2 29.12.2009 23:17