PDA

Просмотр полной версии : Помогите разобраться с кодом:серверное время


slavna
24.03.2006, 09:12
Помогите разобраться с кодом.
Необходимо сделать часы на флеше, которые будут показывать время на сервере.
Но к сожалению часы показывают локальное время. Не могу понять в чем дело.
Начальное время на сервере он должен брать с пхп файла myscript.php
Где ошибка? :confused:
<?php
echo "&myhour=".date("H")."&mymin=".date("i")."&mysec=".date("s");
?>

Код на Action script
loadVariablesNum("myscript.php", 0);
time = new Date(loadVariablesNum);
hours = time.getHours();
if (hours>=24) {
hours = hours-24;
}
if (hours<12 and hours>=0) {
ampm = "AM";
} else {
ampm = "PM";
}
minutes = time.getMinutes();
seconds = time.getSeconds();
hours = hours*30+int(minutes/2);
minutes = minutes*6+int(seconds/10);
seconds = seconds*6;

Parker
24.03.2006, 10:03
Первое php-файл дает тебе string-тип, второе не используй конструкции getMinutes();и тп - они то тебе и возвращают время локальной машины, твоя задача проста получил string и и делай с ним что хочешь. Третье в твоем коде - часы покажут время того момента когда отработал код php - далее они будут стоять на месте - выход написать функцию, которая будет забирать с сервака данные по времени и вызывай ее через интервал, НО гонять постоянно данные между серваком и клиентом - в данном случае ни есть гуд. Вариант загрузи один раз данные с сервера, затем просчитай разницу между серверным и локальным временем - и выводи время локальной машины с поправкой на выше упомянутую разницу.

slavna
24.03.2006, 12:58
А что использовать вместо getMinutes()? В Экшн скрипт я чайник и не знаю как можно реализовать данную задачу. Можно как-нить поконкретнее в виде кода показать как?

Parker
24.03.2006, 13:35
Если тебе не горит, тогда сделаю это тебе к понедельнику, если работой не загрузят

slavna
24.03.2006, 13:40
Parker, спасиб тебе огроменный. Буду очень признательна если ты мне поможешь это сделать. Буду очень ждать. :)

Parker
27.03.2006, 08:53
slavna, ты извини не смог я сделать тебе исходник, работой загрузили, если еще нужно то как смогу сделаю. А так, попробуй загрузить переменные из твоего php файла, и попробуй поработать с ними. Тебе нужно во-первых, получить три переменные (используй loadVars). Далее получи локальное время - часы, минуты, секунды, затем высчитай разницу по ним с серверным временем, и затем выводи локальное время с поправкой на разницу (тут правда придется условия еще просчитывать - что б не получилось больше допустимых и отрицательных значений).

Parker
27.03.2006, 09:02
Вот держи код, который получат локальное время машины:


today = new Date();
dayhour = today.getHours();
dayminute = today.getMinutes();
daysecund = today.getSeconds();

//условия, чтобы время имело нормальный вид:
if (dayminute<10) {
dayminute = "0"+dayminute;
}
if(daysecund<10) {
daysecund = "0"+daysecund;
}

trace(dayhour+":"+dayminute+":"daysecund);

slavna
27.03.2006, 09:22
Исходник,

Parker
27.03.2006, 10:43
Постараюсь до завтра сделать

zlibeg
06.11.2007, 13:39
решили эту проблему?
выложите плз исходник

crazyone
06.11.2007, 15:12
Как по мне - код вобще бессмысленен. Всмысле - сплошная ошибка.

Если просто вывести текущее время на сервере:

var tf=_root.createTextField("tf",_root.getNextHighestDepth(),10,10,300,20);
var my_lv:LoadVars=new LoadVars();
my_lv.load("myscript.php");
my_lv.onLoad=function(success){
if(success){
tf.text=dd(this.myhour)+":"+dd(this.mymin)+":"+dd(this.mysec);
}else{
tf.text="Не удается загрузить время с сервера.";
}
}
function dd(n){
return (n<10)?"0"+n:n;
}

Если нужно обновлять показания часов, можно просто синхронизировать время от времени с сервером, поставив интервал

setInterval(my_lv,"load",1000);

Но это будет жрать лишний трафик и вобще - тупо =)

Поэтому меняем код до такого:

var dms:Number;
var tf=_root.createTextField("tf",_root.getNextHighestDepth(),10,10,300,20);
var my_lv:LoadVars=new LoadVars();
my_lv.load("myscript.php");
my_lv.onLoad=function(success){
if(success){
var mydate=new Date(0,0,0,this.myhour,this.mymin,this.mysec);
var localdate=new Date;
dms=mydate.getTime()-localdate.getTime();
updateDate();
setInterval(updateDate,1000);
}else{
tf.text="Не удается загрузить время с сервера.";
}
}
function dd(n){
return (n<10)?"0"+n:n;
}
function updateDate(){
var localdate=new Date();
localdate=new Date(localdate.getTime()+dms);
tf.text=dd(localdate.getHours())+":"+dd(localdate.getMinutes())+":"+dd(localdate.getSeconds());
}

Что будет обновлять показания таймера раз в секунду, в зависимости от того - какое время вернул пхп скрипт.

zlibeg
09.11.2007, 18:12
а как это будет работать для аналоговых часов?

zlibeg
12.11.2007, 13:51
посмотрите плз код, не могу понять в чём может быть проблема!

PHP скрипт

<?

$myhours = date("G");
$myminutes = date("i");
$myseconds = date("s");

echo "&hours=".$myhours."&minutes=".$myminutes."&seconds=".$myseconds;
?>


actionscript

var
my_lv:LoadVars=new LoadVars();
my_lv.load("myscript.php");
my_lv.onLoad=function(success){
if(success){
var mydate=new Date(this.hours,this.minutes,this.seconds);
var localdate=new Date;
}else{
trace("Не удается загрузить время с сервера");
}
}
hours = my_lv.hours();
minutes = my_lv.minutes();
seconds = my_lv.seconds();
hours = hours*30+int(minutes/2);
minutes = minutes*6+int(seconds/10);
seconds = seconds*6;

zlibeg
12.11.2007, 15:30
посмотрите пожалуйста файл, очень срочно нужно!
спасибо!

Acxat
07.06.2010, 10:48
Выложите пожалуйста исходник