Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    RouterOS
    разбор времени в 7.1

    разбор времени в 7.1

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    разбор времени в 7.1, RouterOS
     
    deadkat
    Guest
    #1
    0
    15.12.2021 17:46:00
    Я заметил новую функцию :timestamp в версии 7.1 и, хотя пока у меня для неё применения нет, сразу подумал о том, чтобы превратить возвращаемую строку в число секунд... Честно говоря, просто подумал, что эта мелочь может кому-то пригодиться, поэтому делюсь здесь:

    :global unixT2S do={
       :local time2parse [:timestamp]
       :local w [:find $time2parse "w"]
       :local d [:find $time2parse "d"]
       :local c [:find $time2parse ":"]
       :local p [:find $time2parse "."]
       :local weeks [:pick $time2parse 0 [$w]]
       :set $weeks ($weeks * 604800)
       :local days [:pick $time2parse ($w + 1) $d]
       :set days ($days * 86400)
       :local hours [:pick $time2parse ($d + 1) $c]
       :set hours ($hours * 3600)
       :local minutes [:pick $time2parse ($c + 1) [:find $time2parse ($c + 3)]]
       :set minutes ($minutes * 60)
       :local seconds [:pick $time2parse ($c + 4) $p]
       :local nanoseconds [:pick $time2parse ($p + 1) [:len $time2parse]]

      # rawtime возвращает число, но точность только до секунды
      # precisetime возвращает строку с полной точностью до наносекунд
      # раскомментируйте нужный вариант вывода
       :local rawtime ($weeks+$days+$hours+$minutes+$seconds)
       :return $rawtime
       :local precisetime ("$rawtime"."."."$nanoseconds")
       #:return $precisetime
    }
     
     
     
    flydvorkin
    Guest
    #2
    0
    31.05.2022 18:29:00
    Хорошая новая функция :timestamp. Но функция возвращает тип time. Если хочешь преобразовать тип time в числовой — функция :tonum работает с ошибкой [:tonum [:timestamp]] возвращает nil… Однако [:totime ANYNUMBER] работает корректно.

    У меня есть скрипт с функцией для правильного преобразования времени в число (целочисленное unix-время в секундах):

    :global timetonum do={
       :local time2parse [ :timestamp ];
       :if ( [ :typeof $1 ] != "nil" ) do={
           :if ( [ :typeof [ :totime $1 ] ] = "time" ) do={
               :set time2parse [ :totime $1 ];
           };
       };

       :local weeks 0;
       :if ( [ :typeof [ :find $time2parse "w" ] ] != "nil" ) do={ :set weeks [ :pick $time2parse 0 [ :find $time2parse "w" ] ]; };

       :local days 0; :local startpos 0;
       :if ( $weeks != 0 ) do={ :set startpos ( [ :find $time2parse "w" ] + 1 ); };
       :if ( [ :typeof [ :find $time2parse "d" ] ] != "nil" ) do={ :set days [ :pick $time2parse $startpos [ :find $time2parse "d" ] ]; };

       :local hours [ :pick $time2parse ( [ :find $time2parse ":" ] - 2 ) [ :find $time2parse ":" ] ];

       :local minutes [ :pick $time2parse ( [ :find $time2parse ":" ] + 1 ) ( [ :find $time2parse ":" ] + 3 ) ];

       :local seconds [ :pick $time2parse ( [ :find $time2parse ":" ] + 4 ) ( [ :find $time2parse ":" ] + 6 ) ];

       :return ( ( $weeks * 604800 ) + ( $days * 86400 ) + ( $hours * 3600 ) + ( $minutes * 60 ) + $seconds );
    };

    Использование:
    :put [$timetonum] — получаем целочисленный таймстамп
    :put [$timetonum 1d1h2s] — конвертирует заданное время в целое число
     
     
     
    mrz
    Guest
    #3
    0
    01.06.2022 20:57:00
    :timestamp должен возвращать время с момента эпохи, где эпоха — 1 января 1970 года, без учёта високосных секунд.
     
     
     
    Amm0
    Guest
    #4
    0
    01.06.2022 21:28:00
    Хорошо знать! Может быть, когда-нибудь :tonum будет работать с типом времени, чтобы получить «количество тиков» из :timestamp. Или, что еще лучше, появится опция для :timestamp вроде type=num|str или format=“%s”.
     
     
     
    Sob
    Guest
    #5
    0
    02.06.2022 02:32:00
    Что я не могу понять, так это как MikroTik может годами наблюдать, как люди пишут безумно длинные скрипты для базовых операций, и при этом не подумать: «Хм, а может, стоит добавить для этого какие-то функции?» (честно говоря, такая мысль у них была, но дальше она не пошла). Разве не очевидно, что такие функции были бы полезны и приветствовались? По поводу времени — почему мы не можем делать что-то вроде [:totime “2022-06-02 04:15:30”], [:dateformat “Y-m-d H:i:s” [:timestamp]] (взять формат, например, из функции date() в PHP) и так далее?
     
     
     
    rextended
    Guest
    #6
    0
    02.06.2022 12:33:00
    MikroTik обязательно должен везде внедрить формат даты и времени ISO:8601, а не пользоваться кучей разных вариантов отображения даты и времени, при этом сохранить работу с "Epoch" повсюду. Вместо того чтобы использовать сокращённые даты в логах или разные варианты Jun/JUN/jun в разных полях и три разных формата даты в логах — к примеру, почему бы не применить логичный и удобный для сортировки формат вроде 2022/06/02?

    Примеры даты и времени в формате ISO:8601:

    2022-06-02T21:10:26+00:00 (Великобритания)  
    2022-06-02T21:10:26Z (UTC)  
    2022-06-02T23:10:26+02:00 (Италия)  

    :toisodatetime [:timestamp] = 2022-06-02T21:10:26Z
    :todatetime [:timestamp] = 2022/06/02 21:10:26
    0 — это смещение времени в минутах, по умолчанию 0, если не указано, для UTC  
    [:toepoch “2022/06/02 21:10:26” 0] = 1654204226
     
     
     
    Amm0
    Guest
    #7
    0
    04.06.2022 20:35:00
    Это эпоха без эпох!
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры