PDA

Просмотр полной версии : часы не работают! в чем дело?


DeeMan757
31.08.2008, 23:10
помогите пожалуйста с часами! они должны показывать время сервера, которое им дает php файл xxx.php но они не работают... всегда показывают 12часов. минуты и секунды правильно. в чем может быть ошибка? вот код:

_root.attachMovie("secondarrow","sec_mc",300,{_x:27.5, _y:27.5});
_root.attachMovie("minutearrow","min_mc",200,{_x:27.5, _y:27.5});
_root.attachMovie("primaryarrow","prim_mc",100,{_x:27.5, _y:27.5});


_root.clock_hours = 0;
_root.left_hours = 0;
ready=false;

var my_xml:XML = new XML();
my_xml.ignoreWhite = true;
my_xml.onLoad = function(success:Boolean)
{
trace(my_xml)
if (success)
{
ready=true;
_root.clock_hours = Math.floor(my_xml.childNodes[0].attributes.h);
lmin = now.getMinutes();
}
}
my_xml.load("http://xxx.ru/xxx/xxx.php?anticache="+Math.random());



_root.onEnterFrame = function()
{
if (ready)
{
if (lmin > now.getMinutes())
_root.left_hours++;

var now:Date = new Date();
sec = now.getSeconds();
min = now.getMinutes();
prim = _root.clock_hours + _root.left_hours;
trace(_root.left_hours)
lmin = min;


_root.sec_mc._rotation = sec/60*360;
//var mr:Number = min*6 + sec/10;
min_mc._rotation = min/60*360;
prim_mc._rotation = prim/12*360;
}
}
и php файл

<?
$smeshenie_servera = 2;

$hour = floor(date('H')) - $smeshenie_servera;

if ($hour<0)
$hour += 24;

if ($hour>=24)
$hour -= 24;

echo '&lt;dat h=\"'.$hour.'\"&gt;';
?>

Haiat
31.08.2008, 23:30
код оформи тегами
)

scarbo
31.08.2008, 23:34
Вот Вам код работающих цифровых часовvar myDate:Date = new Date();
var day:Array = new Array("воскресенье","понедельник","вторник","среда","четверг","пятница","суббота");
var mo:Array = new Array("января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря");
var hint:String = myDate.getDate()+" "+mo[myDate.getMonth()]+" "+myDate.getFullYear()+"г."

this.createEmptyMovieClip("vremya_mc", this.getNextHighestDepth());
var N:TextFormat = new TextFormat();
N.font = "Trebuchet MS";
N.color = 0xFFFFCC;
N.size = 20;
//chas
vremya_mc.createTextField("Ch_de", 0, 0, 0, 10, 20);
vremya_mc.Ch_de.autoSize = true;
vremya_mc.Ch_de.setNewTextFormat(N);
vremya_mc.Ch_de.text = 0;
vremya_mc.createTextField("Ch_ed", 1,(vremya_mc.Ch_de._x+vremya_mc.Ch_de._width),0,10,20);
vremya_mc.Ch_ed.autoSize = true;
vremya_mc.Ch_ed.setNewTextFormat(N);
vremya_mc.Ch_ed.text = 0;
vremya_mc.createTextField("Ch_ra", 2,(vremya_mc.Ch_ed._x+vremya_mc.Ch_ed._width),0,10,20);
vremya_mc.Ch_ra.autoSize = true;
vremya_mc.Ch_ra.setNewTextFormat(N);
vremya_mc.Ch_ra.text = ":";
//minuti
vremya_mc.createTextField("Mi_de", 3, (vremya_mc.Ch_ra._x+vremya_mc.Ch_ra._width), 0, 10, 20);
vremya_mc.Mi_de.autoSize = true;
vremya_mc.Mi_de.setNewTextFormat(N);
vremya_mc.Mi_de.text = 0;
vremya_mc.createTextField("Mi_ed", 4,(vremya_mc.Mi_de._x+vremya_mc.Mi_de._width),0,10,20);
vremya_mc.Mi_ed.autoSize = true;
vremya_mc.Mi_ed.setNewTextFormat(N);
vremya_mc.Mi_ed.text = 0;
vremya_mc.createTextField("Mi_ra", 5,(vremya_mc.Mi_ed._x+vremya_mc.Mi_ed._width),0,10,20);
vremya_mc.Mi_ra.autoSize = true;
vremya_mc.Mi_ra.setNewTextFormat(N);
vremya_mc.Mi_ra.text = ":";
//secundi
vremya_mc.createTextField("Sec_de", 6, (vremya_mc.Mi_ra._x+vremya_mc.Mi_ra._width), 0, 10, 20);
vremya_mc.Sec_de.autoSize = true;
vremya_mc.Sec_de.setNewTextFormat(N);
vremya_mc.Sec_de.text = 0;
vremya_mc.createTextField("Sec_ed", 7,(vremya_mc.Sec_de._x+vremya_mc.Sec_de._width),0,10,20);
vremya_mc.Sec_ed.autoSize = true;
vremya_mc.Sec_ed.setNewTextFormat(N);
vremya_mc.Sec_ed.text = 0;

//razmeshenie
vremya_mc._x = (Stage.width-vremya_mc._width)/2;
vremya_mc._y = (Stage.height-vremya_mc._height)/2;

vremya_mc.onRollOver = function(){
viewHint();
}
vremya_mc.onRollOut = function(){
hint_list.removeTextField();
}
vremya_mc.onEnterFrame = function(){
var D:Date = new Date();
var ch=D.getHours();
this.Ch_de.text=Math.floor(ch/10);
this.Ch_ed.text=ch%10;
var min=D.getMinutes();
this.Mi_de.text=Math.floor(min/10);
this.Mi_ed.text=min%10;
var sec=D.getSeconds();
this.Sec_de.text=Math.floor(sec/10);
this.Sec_ed.text=sec%10;
}
там есть такой пункт:getHours(),у Вас я егшо не вижу
И оформляйте свои коды тегами.

alexcon314
01.09.2008, 00:01
echo '&lt;dat h=\"'.$hour.'\"&gt;';
А если так?
echo "<dat h=\"$hour\"/>";

DeeMan757
01.09.2008, 01:07
echo '&lt;dat h=\"'.$hour.'\"&gt;';
А если так?
echo "<dat h=\"$hour\"/>";

пробовал, так только хуже

DeeMan757
01.09.2008, 20:15
ни кто не знает?

alexcon314
01.09.2008, 23:10
Плюс за ап.

DeeMan757
04.09.2008, 21:00
неужели такая сложная проблема, что никто не знает?

alexcon314
05.09.2008, 00:08
DeeMan757, вам уже сделали замечание за ап темы. Три плюса означают бан.

Ваш код AS без изменений (только адрес http:// другой) и ваш же код PHP с заменой строки
echo '&lt;dat h=\"'.$hour.'\"&gt;';на
echo "<dat h=\"$hour\"/>";
прекрасно работают. Стрелочки указывают время правильно.
В чем проблема? Сформулируйте ясно. Ваше
пробовал, так только хужемне, например, ни о чем не говорит.

DeeMan757
05.09.2008, 02:43
сорри за апы, просто очень срочно нужно було найти ошибку...
изначально в PHP коде была именно строка
echo "<dat h=\"$hour\"/>";
но с ней часы вообще не запускались.. только циферблат, без стрелок.
когда я заменил ее на
echo '&lt;dat h=\"'.$hour.'\"&gt;';
появились стрелки, но нормально шли только минутная и секундная.. а часовая показывала только 12ч
во флеше если запустить тест он показывает
&lt;dat h=23&gt;
0
0
0
0
итд

в чем дело я не знаю, вот и спросил..
alexcon314, вы сказали что код рабочий, вы его проверяли? заливали на сервер?

alexcon314
06.09.2008, 14:15
Тестил на своем локальном апаче. Передача данных в пхп
echo "<dat h=\"$hour\"/>";у меня приводит к трейсу во флэше как нормального xml.
Вообще, можете попробовать использовать LoadVars.
echo "h=$hour&";
var lv = new LoadVars();
lv.onLoad = function(s) {
if (s) {
trace(this.h);
} else {
trace('Ошибка при загрузке.');
}
};
lv.load('http://server/time.php');

DeeMan757
06.09.2008, 15:04
спасибо! попробую

DeeMan757
07.09.2008, 18:23
странно... все работает в первоначальном варианте... наверное у меня что то с сервером не так было...

хотя нет.. есть баг! при открыти часов они правелно показывают время, но если к примеру время 18:30 то часовая стрелка стоит не между 6 и 7 а ровно на 6 как если бы было 18:00. и когда с 18:59 часы должны перейти на 19:00, они переходят опять на 18:00... если перезапучтить флешку, она опять укажет нормальное время на момент запуска.. к примеру уже 19:04.. как с этим бороться?

alexcon314
07.09.2008, 23:56
this.onEnterFrame = function() {
var time:Date = new Date();
//Сохранение текущего времени
var sec = time.getSeconds();
var min = time.getMinutes();
var hour = time.getHours();
//Вращение стрелок
seconds._rotation = sec * 6;
minutes._rotation = (min + sec / 60) * 6;
hours._rotation = (hour + min / 60) * 30;
};

Вот простой скрипт часов. Заметьте, что положение клипов стрелок должно быть вертикальное с точкой регистрации внизу.
Потрейсите ваши переменные. Например вы обращаетесь к объекту Data(), не создав его преред этим: в onLoad и в EnterFrame.