Конвертация времени...
 

[Решено] Конвертация времени из ISO в unix timestamp с помощью JavaScript в Zabbix

8 Записи
2 Пользователи
2 Reactions
3,052 Просмотры
(@ruslan)
Active Member
Присоединился: 2 года назад
Записи: 5
Создатель темы  

Доброго времени суток уважаемые форумчане!

Прошу помощи поскольку сам уже перерыл все возможные форумы и сайты а решить задачу так и не получилось.

Проблема заключается в следующем, есть несколько сотен устройств на которых необходимо контролировать корректность текущей даты и времени, дата и время на устройствах предоставляется в формате YYYY-MM-DDThh:mm:ss±hh:mm (ISO 8601), а в Zabbix присутствует только возможность контроля даты и времени в формате unixtime на который можно настроить триггер при помощи выражения "fuzzytime".

Из той информации что находил я понял только то что формат времени ISO 8601 надо преобразовать через javascript в формат unixtime и уже на него настроить триггер, но поскольку я полный ноль в js прошу у Вас помощи в решении данной проблемы.

 

Заранее благодарю за помощь!

Тема была редактированна 2 года назад от Ruslan
Тема была редактированна 2 года назад от Zerox

   
ОтветитьЦитата
(@zerox)
Prominent Member Admin
Присоединился: 11 лет назад
Записи: 926
 

@ruslan что это за устройства и как они передают своё время на Zabbix Server?


   
ОтветитьЦитата
(@ruslan)
Active Member
Присоединился: 2 года назад
Записи: 5
Создатель темы  

@zerox доброго времени суток, видеорегистраторы hikvision, время берется через ISAPI с определенной строки XML страницы, в текстовом формате


   
ОтветитьЦитата
(@zerox)
Prominent Member Admin
Присоединился: 11 лет назад
Записи: 926
 

По идее, это всё делается на javascript довольно просто. Подобное преобразование времени выполняется в одну строку. Выглядеть предобработка в Zabbix будет примерно так:

# задаём переменную с полученным временем
const date = new Date(value);
# конвертируем в unixtime
const timestamp = date.getTime();
# выводим полученное значение
console.log(timestamp);

Это общий случай. В данном случае value это время в формате ISO, которое уже в айтеме так или иначе обработано, чтобы не было ничего лишнего. То есть в предыдущих шагах предобработки надо убрать всё лишнее, а на этом этапе сделать преобразование.

Это надо тестировать. Я написал пример того, как может выглядеть конвертация. Конечная реализация может отличаться.


   
Ruslan reacted
ОтветитьЦитата
(@ruslan)
Active Member
Присоединился: 2 года назад
Записи: 5
Создатель темы  

@zerox благодарю за помощь, буду проверять, по результату обязательно отпишусь


   
ОтветитьЦитата
(@ruslan)
Active Member
Присоединился: 2 года назад
Записи: 5
Создатель темы  

@zerox Доброго времени суток, в общем все заработало с некоторыми изменениями, и получил нужное мне значение с учетом моего часового пояса (+06:00),

const date = new Date(Date.parse(value));
const timestamp = date.getTime();
return (timestamp/1000|0);

Благодарю за помощь!


   
Zerox reacted
ОтветитьЦитата
(@zerox)
Prominent Member Admin
Присоединился: 11 лет назад
Записи: 926
 
От: @ruslan
return (timestamp/1000|0);

 

Можете пояснить эту строку? Зачем делим на 1000? И в каком случае будет 0 в выводе?


   
ОтветитьЦитата
(@ruslan)
Active Member
Присоединился: 2 года назад
Записи: 5
Создатель темы  

@zerox без деления на 1000 он выдает дату 5000 года, а насчет 0 не обратил на это внимание, эту часть кода я взял на одном из форумов когда искал варианты как реализовать преобразование


   
ОтветитьЦитата
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar