Переменная времени работы скрипта.



  • В отчёте работы скрипта есть время работы. Можно его вызвать в переменную или лог? Без функции OnApplicationStart и вычитания дат new Date(); ?


  • administrators

    @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 Чтобы скрипт отрабатывал раз в сутки есть проще способ, у меня много что на нём основано.

    1. Ставишь перед циклом временной маркер
    VAR_DATE_OLD = new Date()
    
    1. Потом в цикле Выполнить код
    VAR_DATE_NEW = new Date()
    VAR_DATE = ((VAR_DATE_NEW) - (VAR_DATE_OLD)) / 60000
    

    /60000 мне нужны были минуты. Можно было разделить на 3600000 если нужны часы.

    1. Далее ставишь IF
    [[DATE]] > 5
    

    Чтобы раз в 5 минут выполнялся IF

    1. В этом IF в конце обновляешь временной маркер
    VAR_DATE_OLD = new Date()
    


  • @Fox я в базу переписываю последнее время запуска. и от него пляшу. При загрузке берет значение из базы, ну и соответственно к выводу приходит, работать ему, или нет.Математика точно такая же


Log in to reply
 

Looks like your connection to Bablosoft was lost, please wait while we try to reconnect.