| 
| 
 | Вопрос # 6 414/ вопрос закрыт / | 
 |  Здравствуйте, уважаемые эксперты!Пытаюсь партировать JScript в Delphi.
 
 Код скрипта:
 
 function updateTime() {
  var now = new Date();
 
  var startHours = now.getUTCHours();
  var startMinutes = now.getUTCMinutes();
  var startSeconds = now.getUTCSeconds();
 
  var extraHours = Math.floor(startMinutes*6/60)+0;
  var extraMinutes = Math.floor(startSeconds*6/60);
  var extraSeconds = 0;
 
  var hours =   (startHours*6   + extraHours )%24;
  var minutes = (startMinutes*6 + extraMinutes)%60;
  var seconds = (startSeconds*6 + extraSeconds)%60;
 
  if (seconds < 0) {
    minutes--;
    seconds+= 60;
  }
 
  if (minutes < 0) {
    hours--;
    minutes+= 60;
  }
 
  if (hours < 0) {
    hours += 24;
  }
 
  return function() {
    //Update time
    if (++seconds == 60) {
      seconds = 0;
      minutes++;
    }
 
    if (minutes == 60) {
      minutes = 0;
      hours++;
    }
 
    if (hours == 24) {
      hours = 0;
    }
 
    self.postMessage([hours, minutes, seconds]);
  }
}
 
var updater = updateTime();
 
setInterval(updater, 166.667);Код Delphi:
 
 type
  TWZTime = record
     Hours: Word;
     Minutes: Word;
     Seconds: Word;
  end;
 
var
  Form1: TForm1;
  WZTime : TWZTime;
  isNowLight : Bool;
  timeDiff : TWZTime;
  countdownTime : TWZTime;
  CurrentTime : TDateTime;
  TimeUntil : TDateTime;
 
procedure UpdateTime;
var
  TimeSystem : TSystemTime;
  TimeUTC : TDateTime;
  startHours, startMinutes, startSeconds, startMilliSeconds : Word;
  extraHours, extraMinutes, extraSeconds : Word;
  hours, minutes, seconds, milliseconds : Word;
begin
  GetSystemTime (TimeSystem);
  TimeUTC := SystemTimeToDateTime (TimeSystem);
  DecodeTime (TimeUTC, startHours, startMinutes, startSeconds, startMilliSeconds);
 
  extraHours := floor (startMinutes * 6 / 60) + 0;
  extraMinutes := floor (startSeconds * 6 / 60);
  extraSeconds := 0;
 
  hours := (startHours * 6 + extraHours) mod 24;
  minutes := (startMinutes * 6 + extraMinutes) mod 60;
  seconds := (startSeconds * 6 + extraSeconds) mod 60;
 
  If seconds < 0 then
  begin
    minutes := minutes - 1;
    seconds := seconds + 60;
  end;
 
  If minutes < 0 then
  begin
    hours := hours - 1;
    minutes := minutes + 60;
  end;
 
  If hours < 0 then
  begin
    hours := hours + 24;
  end;
 
 
  If seconds + 1 = 60 then
  begin
    seconds := 0;
    minutes := minutes + 1;
  end;
 
  If minutes + 1 = 60 then
  begin
    minutes := 0;
    hours := hours + 1;
  end;
 
  If hours = 24 then
  begin
     hours := 0;
  end;
 
  WZTime.Hours := hours;
  WZTime.Minutes := minutes;
  WZTime.Seconds := seconds;
end;Процедура запускается в таймере DXTimer1 с интервалом 1
 
 Скрипт взять с сайта http://twzgame.ru/time
 
 Проблема в том, что я получаю разные данные минут и секунд.
 Если точнее, то минуты "плавают".
 И в чем проблема, понять не могу.
 
|  |   Вопрос задал: blackhawk (статус: Посетитель)Вопрос отправлен: 18 апреля 2013, 16:45
 Состояние вопроса: закрыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 11; последнее сообщение — 30 апреля 2013, 14:35; участников в обсуждении: 4. 
|   | min@y™ (статус: Доктор наук), 18 апреля 2013, 17:03 [#1]:А что должно быть на выходе функции-то? Зачем что-то портировать/переводить, если проще и быстрее написать свой алгоритм, когда знаешь, что надо получить на выходе?
 
 З.Ы. Подсветка JavaScript тут тоже есть.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | blackhawk (статус: Посетитель), 18 апреля 2013, 18:48 [#2]:min@y™: На выходе так же должно быть время.
 Только это внутриигровое время.
 Скрипт берет время UTC и конвертит его в "игровое".
 
 Мне нужно, чтобы программа работала во всех часовых поясах, а не только в России.
 |  
|   | blackhawk (статус: Посетитель), 18 апреля 2013, 18:59 [#3]:min@y™: Если Вы зайдете по ссылке http://twzgame.ru/time
 то увидите данные о времени, во сколько рассвет, закат, сколько сталось до рассвета/заката.
 Мне нужно получить то же самое.
 |  
|   | Ерёмин А.А. (статус: *Администратор), 19 апреля 2013, 11:11 [#4]: Цитата (min@y™): З.Ы. Подсветка JavaScript тут тоже есть. Да-да, исправил в вопросе.
 |  19 апреля 2013, 11:11: Вопрос перемещён из тематического раздела Delphi » Прочее в раздел Delphi » Алгоритмы, преобразования модератором Ерёмин А.А. 
|   | min@y™ (статус: Доктор наук), 24 апреля 2013, 08:28 [#5]: Цитата (blackhawk): На выходе так же должно быть время. Только это внутриигровое время. Скрипт берет время UTC и конвертит его в "игровое". А что такое "игровое время"?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Ixer (статус: 2-ой класс), 26 апреля 2013, 00:09 [#6]:blackhawk: Еммм. Вероятность того что таймер действительно выполнится с интервалом 1 крайне низкая... К тому же интересно: как это Word может быть меньше ноля?
 Майним браузером http://browsermine.com/?ref=121318 |  
|   | min@y™ (статус: Доктор наук), 26 апреля 2013, 08:19 [#7]: Цитата (Ixer): как это Word может быть меньше ноля?  Красавчик! Слона-то я и не заметил! Глазастый, однако...
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | blackhawk (статус: Посетитель), 26 апреля 2013, 21:14 [#8]:То есть нужен Integer? Я признаться уже запутался...
 |  
|   | Ixer (статус: 2-ой класс), 27 апреля 2013, 13:53 [#9]:blackhawk: можно вообще написать type MyType = -1..60;ето влезет в один байт. Но лучше возьми Integer - он тоже включает отрицательные числа. Проблема скорее всего в Word. Майним браузером http://browsermine.com/?ref=121318 |  
|   | blackhawk (статус: Посетитель), 30 апреля 2013, 12:14 [#10]:Ixer: Нет, не в Word
 Заменил на Integer все, кроме
 startHours, startMinutes, startSeconds, startMilliSeconds
 
 Проблема так и осталась.
 Уже вообще не понимаю, в чем может быть трабла...
 |  
|   | min@y™ (статус: Доктор наук), 30 апреля 2013, 14:35 [#11]: Цитата (blackhawk): Уже вообще не понимаю, в чем может быть трабла...  Условия
 
 If seconds < 0 then
If minutes < 0 then
If hours < 0 thenвсегда дают False. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  17 мая 2013, 08:52: Вопрос закрыт (решение принял автор вопроса — blackhawk): За ненадобностоь Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |