Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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 Вопрос закрыт (ответы не принимаются, мини-форум закрыт)

Вопрос задал: blackhawk (статус: Посетитель)
Вопрос отправлен: 18 апреля 2013, 16:45
Состояние вопроса: закрыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 11; последнее сообщение — 30 апреля 2013, 14:35; участников в обсуждении: 4.
min@y™

min@y™ (статус: Доктор наук), 18 апреля 2013, 17:03 [#1]:

А что должно быть на выходе функции-то?
Зачем что-то портировать/переводить, если проще и быстрее написать свой алгоритм, когда знаешь, что надо получить на выходе?

З.Ы. Подсветка JavaScript тут тоже есть.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
blackhawk

blackhawk (статус: Посетитель), 18 апреля 2013, 18:48 [#2]:

min@y™:
На выходе так же должно быть время.
Только это внутриигровое время.
Скрипт берет время UTC и конвертит его в "игровое".

Мне нужно, чтобы программа работала во всех часовых поясах, а не только в России.
blackhawk

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™

min@y™ (статус: Доктор наук), 24 апреля 2013, 08:28 [#5]:

Цитата (blackhawk):

На выходе так же должно быть время. Только это внутриигровое время. Скрипт берет время UTC и конвертит его в "игровое".

А что такое "игровое время"?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ixer

Ixer (статус: 2-ой класс), 26 апреля 2013, 00:09 [#6]:

blackhawk: Еммм. Вероятность того что таймер действительно выполнится с интервалом 1 крайне низкая...
К тому же интересно: как это Word может быть меньше ноля?
Майним браузером http://browsermine.com/?ref=121318
min@y™

min@y™ (статус: Доктор наук), 26 апреля 2013, 08:19 [#7]:

Цитата (Ixer):

как это Word может быть меньше ноля?

Красавчик! Слона-то я и не заметил! Глазастый, однако...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
blackhawk

blackhawk (статус: Посетитель), 26 апреля 2013, 21:14 [#8]:

То есть нужен Integer?
Я признаться уже запутался...
Ixer

Ixer (статус: 2-ой класс), 27 апреля 2013, 13:53 [#9]:

blackhawk: можно вообще написать
type MyType = -1..60;
ето влезет в один байт. Но лучше возьми Integer - он тоже включает отрицательные числа. Проблема скорее всего в Word.
Майним браузером http://browsermine.com/?ref=121318
blackhawk

blackhawk (статус: Посетитель), 30 апреля 2013, 12:14 [#10]:

Ixer:
Нет, не в Word
Заменил на Integer все, кроме
startHours, startMinutes, startSeconds, startMilliSeconds

Проблема так и осталась.
Уже вообще не понимаю, в чем может быть трабла...
min@y™

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): За ненадобностоь

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:37
Выполнено за 0.03 сек.