Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Excel VBA, CAD, Софт, ОС, Windows, Ubuntu, Android, VPS
Win Api, Assembler, C++, Java, Pascal, Lazarus, Delphi, OpenGL, DirectX
C#, Qt, .NET, ASP.NET, Windows Forms, ADO.NET, Framework, WPF, UWP, WinRT, XAML
HTML, CSS, JavaScript, Ajax, PHP, Perl, Python, Ruby, SQL, WordPress, API, XML, JSON, ActionScript, Flash

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

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

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

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

Как можно привязать таймер к серверному времени?
Alex-2 вне форума   Ответить с цитированием
Старый 06.03.2017, 15:25   #2
ADSoft
Профессионал
 
Регистрация: 25.02.2007
Адрес: Татарстан
Сообщений: 2,755
Репутация: 788

icq: 303-206-418
skype: ad-soft.info
По умолчанию

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

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

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, 23:49   #4
Andkorol
Профессионал
 
Регистрация: 31.05.2010
Сообщений: 2,978
Репутация: 908
По умолчанию

В 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 в 23:51.
Andkorol на форуме   Ответить с цитированием
Старый 09.03.2017, 03:09   #5
Alex-2
Пользователь
 
Регистрация: 16.02.2017
Сообщений: 15
Репутация: 10
По умолчанию

Цитата:
Сообщение от 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, 10:28   #6
ADSoft
Профессионал
 
Регистрация: 25.02.2007
Адрес: Татарстан
Сообщений: 2,755
Репутация: 788

icq: 303-206-418
skype: ad-soft.info
По умолчанию

потому что так сам сказал программе
Код:

F j,Y H:i

надо секунды?
Код:

F j,Y H:i:s

ADSoft вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер на 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 30.12.2009 00:17




14:42.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru