Переменная времени работы скрипта.
-
В отчёте работы скрипта есть время работы. Можно его вызвать в переменную или лог? Без функции OnApplicationStart и вычитания дат new Date(); ?
-
@Fox said in Переменная времени работы скрипта.:
Без функции OnApplicationStart и вычитания дат new Date(); ?
Нет, только так, причем переменная должна быть глобальной.
-
Захотел реализовать в админке счётчик времени работы каждого потока. Точнее определённой функции у каждого потока.
Поставил перед заходом в цикл нужной мне функции маркер времени:VAR_TM = new Date();
А уже при срабатывании условий в функции ставится новый маркер времени и вычитается из старого:
VAR_TM2 = new Date(); VAR_TIME_JOB_0 = ((VAR_TM2) - (VAR_TM));
В переменной TIME_JOB_0 получаю миллисекунды прошедшие с одного маркера до другого.
Дак вот из этих миллисекунд надо получить время чч:мм:ссПробывал через функции получить часы, минуты и секунды
VAR_H_JT = (VAR_TIME_JOB_0).getHours(); VAR_M_JT=(VAR_TIME_JOB_0).getMinutes(); VAR_S_JT=(VAR_TIME_JOB_0).getSeconds();
Ругается ошибкой : TypeError: Result of expression '(VAR_TIME_JOB_0).getSeconds' [undefined] is not a function
Пробывал перевести полученные миллисекунды в дату и снова получить функцией время..
VAR_TM2 = new Date(); VAR_TIME_JOB_0 = ((VAR_TM2) - (VAR_TM)); VAR_TIME_JOB = new Date(VAR_TIME_JOB_0); VAR_H_JT = (VAR_TIME_JOB).getHours(); VAR_M_JT=(VAR_TIME_JOB).getMinutes(); VAR_S_JT=(VAR_TIME_JOB).getSeconds();
Но так как в переменной TIME_JOB теперь дата Thu Jan 01 1970 05:06:17 GMT+0500 (RTZ 4) то функция получает значения 5 часов, 6 минут и 17 секунд. Хотя по факту прошло 337951 миллисекунд, тоесть 5 минут 38 секунд.
Пробовал тупым делением, когда полученные миллисекунды делил на 1000 (для секунд), на 60000 (для минут).. В итоге мог получить значение вида 1 час 70 минут 4200 секунд..
Голова уже не варит, такой простой косяк, а упёрся и не даётся..
-
Через три звезды колена сделал.. Тупо через деление..
VAR_TM2 = new Date(); VAR_TIME_JOB_0 = ((VAR_TM2) - (VAR_TM))/1000; VAR_H_JT = Math.floor((VAR_TIME_JOB_0)/3600) VAR_M_JT = Math.floor(VAR_TIME_JOB_0/60)-((VAR_H_JT)*60) VAR_S_JT = Math.floor(VAR_TIME_JOB_0)-((Math.floor(VAR_TIME_JOB_0/60))*60)
-
@Fox так же пришлось реализовать. Не красиво, но работает. Через математический лес
-
@Viktor said in Переменная времени работы скрипта.:
@Fox так же пришлось реализовать. Не красиво, но работает. Через математический лес
Согласен. Главное что работает :)
Добавил условие отображение минут, если скрипт работает больше минуты. И часов, если скрипт работает больше часа.VAR_TM2 = new Date(); VAR_TIME_JOB_0 = ((VAR_TM2) - (VAR_TM))/1000; VAR_H_JT = Math.floor((VAR_TIME_JOB_0)/3600) VAR_M_JT = Math.floor(VAR_TIME_JOB_0/60)-((VAR_H_JT)*60) VAR_S_JT = Math.floor(VAR_TIME_JOB_0)-((Math.floor(VAR_TIME_JOB_0/60))*60) if (VAR_TIME_JOB_0 > 0) VAR_TIME_JOB = VAR_S_JT + "с" if (VAR_TIME_JOB_0 > 60) VAR_TIME_JOB = VAR_M_JT + "м " + VAR_S_JT + "с" if (VAR_TIME_JOB_0 > 3600) VAR_TIME_JOB = VAR_H_JT + "ч " + VAR_M_JT + "м " + VAR_S_JT + "с"
Можно ещё добавить отображение нуля до 10..Чтобы отображалось 08, а не просто 8.
Но думаю это лишнее..
-
@Fox просто сделал, чтобы скрипт отрабатывал раз в сутки. Так же вычитание дат в мили, потом математика, получаю часы. Если большеравно 24.... и т.д
-
@Viktor Чтобы скрипт отрабатывал раз в сутки есть проще способ, у меня много что на нём основано.
- Ставишь перед циклом временной маркер
VAR_DATE_OLD = new Date()
- Потом в цикле Выполнить код
VAR_DATE_NEW = new Date() VAR_DATE = ((VAR_DATE_NEW) - (VAR_DATE_OLD)) / 60000
/60000 мне нужны были минуты. Можно было разделить на 3600000 если нужны часы.
- Далее ставишь IF
[[DATE]] > 5
Чтобы раз в 5 минут выполнялся IF
- В этом IF в конце обновляешь временной маркер
VAR_DATE_OLD = new Date()
-
@Fox я в базу переписываю последнее время запуска. и от него пляшу. При загрузке берет значение из базы, ну и соответственно к выводу приходит, работать ему, или нет.Математика точно такая же