26.02.2013, 19:37
|
Новичок на форуме
|
|
Регистрация: 26.02.2013
Сообщений: 6
|
|
Нужен таймер
Нужен таймар для сайта который будет одщитавать время до 7:00 затем до 15:00 и до 23:00 и снова 7:00 по московськом времени.
Зараня очень признательный за помощь.
|
|
26.02.2013, 23:29
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Woldor, таймер по местному времени
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body><div id = 'show'></div>
<script type="text/javascript">
function two(a) {
return (9 < a ? "" : "0") + a
}
function formatTime(a) {
a = Math.floor(a / 1E3);
var c = Math.floor(a / 60),
d = Math.floor(c / 60);
a %= 60;
c %= 60;
return two(d) + " : " + two(c) + " : " + two(a)
}
function Time() {
var a = new Date, c = [7, 15, 23, 7], d = [], e = a.getDate() + 1, b = 0;
for (; b < c.length; b++)
a.setHours(c[b], 0, 0, 0),
3 == b && a.setDate(e),
d[b] = a.getTime();
for (b = 0; b < c.length && !(a = d[b] - (new Date).getTime(), 0 < a); b++);
document.getElementById("show").innerHTML = "До " + c[b] + " осталось " + formatTime(a);
window.setTimeout(Time, 1E3)
};
Time()
</script>
</body>
</html>
Последний раз редактировалось рони, 26.02.2013 в 23:32.
|
|
26.02.2013, 23:52
|
Новичок на форуме
|
|
Регистрация: 26.02.2013
Сообщений: 6
|
|
а под московское время подогнать можна а то эта имеет бальшое значения
|
|
27.02.2013, 00:25
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от Woldor
|
под московское время подогнать можна
|
можно если брать время с сервера но это отдельная тема для раздела работа.
|
|
27.02.2013, 01:55
|
Новичок на форуме
|
|
Регистрация: 26.02.2013
Сообщений: 6
|
|
а что отвичает за поточное время
|
|
27.02.2013, 04:11
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от рони
|
можно если брать время с сервера но это отдельная тема для раздела работа.
|
Да пофег имхо - берешь по гринвичу http://javascript.ru/Date.UTC и добавляшь смещение москвы
|
|
27.02.2013, 11:38
|
|
Профессор
|
|
Регистрация: 25.08.2011
Сообщений: 420
|
|
вот моё изобретение, не много корявое, но работает, 1-ым параметром подаешь 1-ую дату до которой надо отсчитать, далее 2-ым параметром в массиве подаем, другие даты, после 1-ой, повторяюсь код сырой, можно упростить, просто лень, рабоатет и ладно=)
function timer( objname, mysqldate, attr, b_next ){
//var y, m, d, h=0, i=0, s=0;
h=0; i=0; s=0;
comment_start = attr.start!=undefined ? attr.start : '';
comment_end = attr.end !=undefined ? attr.end : mysqldate+' - эта дата уже прошла!';
if( ymd = /^(\d\d\d\d)-(\d\d)-(\d\d)/.exec(mysqldate) ){
y = ymd[1];
m = Number(ymd[2])-1;
d = ymd[3];
//alert('y=>'+y+' m=>'+m+' d=>'+d);
if( his = /(\d\d):(\d\d):(\d\d)$/.exec(mysqldate) ){
h = his[1];
i = his[2];
s = his[3];
//alert('h=>'+h+' i=>'+i+' s=>'+s);
}
} else {
$( objname ).text(mysqldate+ '- не соответствует формату YYYY-MM-DD [H:i:s]');
return;
}
finishday = new Date( y, m, d, h, i, s );
endTS = finishday.getTime();
var intervalid = setInterval(function(){
now = new Date();
totalRemains = (endTS - now.getTime());
if (totalRemains>1){
RemainsSec=(parseInt(totalRemains/1000));
RemainsFullDays=(parseInt(RemainsSec/(24*60*60)));
secInLastDay=RemainsSec-RemainsFullDays*24*3600;
RemainsFullHours=(parseInt(secInLastDay/3600));
if (RemainsFullHours<10){RemainsFullHours="0"+RemainsFullHours};
secInLastHour=secInLastDay-RemainsFullHours*3600;
RemainsMinutes=(parseInt(secInLastHour/60));
if (RemainsMinutes<10){RemainsMinutes="0"+RemainsMinutes};
lastSec=secInLastHour-RemainsMinutes*60;
if (lastSec<10){lastSec="0"+lastSec};
$( objname ).html( comment_start + (RemainsFullDays ? "<span>"+RemainsFullDays+"дн.</span> " :"")+RemainsFullHours+"ч. "+RemainsMinutes+"м. "+lastSec+"с.");
} else {
clearInterval(intervalid);
if(b_next && typeof b_next==='object'){
next = b_next[3]!=undefined ? b_next[3] : '';
timer(b_next[0], b_next[1], b_next[2], next);
} else {
$( objname ).text( comment_end );
}
}
},1000);
}
timer(
'.timer', "<?php echo date('Y-m-d 12:00:00');?>", {start: 'До обеда осталось: '},[
'.timer', "<?php echo date('Y-m-d 13:15:00');?>", {start: 'Все бежим на ОБЕД! До конца обеда осталось: '},[
'.timer', "<?php echo date('Y-m-d 17:00:00');?>", {start: 'До конца рабочего дня осталось: ', end: 'Всё, хорош работать, бегите домой!'}
]
]
);
|
|
27.02.2013, 12:32
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от Deff
|
Да пофег имхо
|
точное время и таймзону без сервера на компьюторе взять неоткуда, при условии что время и зона на компе выставлены правильно из-за смены зимнего/летнего если она есть, таймзону в скрипте придётся два раза в год корректировать. устанвливать дату в формат UTC нет необходимости, достаточно знать разницу между местной таймзоной и московской.
Вариант таймера с коррекцией на московское время...
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body><div id = 'show'></div>
<script type="text/javascript">
function two(a) {
return (9 < a ? "" : "0") + a
}
function formatTime(a) {
a = Math.floor(a / 1E3);
var c = Math.floor(a / 60),
d = Math.floor(c / 60);
a %= 60;
c %= 60;
return two(d) + " : " + two(c) + " : " + two(a)
}
function Time() {
var a = new Date, c = [7, 15, 23, 7], d = [], e = a.getDate() + 1, b = 0, m = -240 - a.getTimezoneOffset();
for (; b < c.length; b++)
a.setHours(c[b], m, 0, 0),
3 == b && a.setDate(e),
d[b] = a.getTime();
for (b = 0; b < c.length && !(a = d[b] - (new Date).getTime(), 0 < a); b++);
document.getElementById("show").innerHTML = "До " + c[b] + " : 00 по Москве осталось " + formatTime(a);
window.setTimeout(Time, 1E3)
};
Time()
</script>
</body>
</html>
правильность работы скрипта проверьте кому нетрудно с немосковским временем.
Последний раз редактировалось рони, 27.02.2013 в 12:45.
|
|
28.02.2013, 04:01
|
Новичок на форуме
|
|
Регистрация: 26.02.2013
Сообщений: 6
|
|
работает идеально большое спасибо
еще пожалуйста отметь места которое нужно изменить при переходе на летнее время
|
|
28.02.2013, 08:33
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от Woldor
|
нужно изменить
|
значение выдаст алерт
var a = new Date;
alert(a.getTimezoneOffset())
|
|
|
|