Рейтинг темы:
  • 1 Голос(ов) - 5 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Преобразование времени из строки в тип Date
#1
Функции WINNUM JavaScript SDK возвращает время сигналов в строку формата 'yyyy-MM-dd hh:mm: ss.SSS'.
При необходимости преобразовать в тип Date можно использовать Date.parse:
Код:
var currentTime = Date.parse( '2024-02-15 9:5:1' ); // вернет время в миллисекундах с 1970 года - 1707977101000
var currentDate = new Date( currentTime ); // вернет дату - Thu Feb 15 2024 09:05:01 GMT+0300 (Москва, стандартное время)

Функция baseSdkUtils.toDateObject дает некорректный результат, если часов, минут, или секунд меньше 10.
baseSdkUtils.toDateObject( '2024-02-15 9:5:1' ); // вернет ошибку

Hello World!:

- Сообщений не найдено.
Ответ
#2
Хочу добавить. Эта особенность встречается и в стандартных методах для работы с объектом Date(), вот пример поиска вчерашнего дня для отображения в теге <input>, чтобы его можно было взять и использовать далее в коде:
Код:
var n = new Date(new Date() - 86400000); // получили объект Date() для сегодняшнего числа в миллисекундах и отняли сутки
    var g = n.getFullYear(); // стандартная функция для выделения из объекта четырехзначного года (вернет 2024)
    var m = n.getMonth() + 1; // текущий месяц, январь - это 0
    var d = n.getDate(); // дата
    if (m < 10){m = '0' + m} // чтобы 2 стало 02
    if (d < 10){d = '0' + d} //  чтобы 2 стало 02
    var name_input = document.getElementById('datevalue'); // куда вставить результат
    name_input.value = g + '-' + m + '-' + d; // пример: 2024-03-09
Что касается времени, его так же можно разбирать методами getHours, getMinutes, getSeconds, и мы также получим проблему с 0, которая решается в одну строку  if (x < 10){x = '0' + x}.

Hello World!:

- Сообщений не найдено.
Ответ
#3
Цитата:Функции WINNUM JavaScript SDK возвращает время сигналов в строку формата 'yyyy-MM-dd hh:mm: ss.SSS'.
Exclamation Не все функции WINNUM JavaScript SDK возвращают даты форматы "yyyy-MM-dd hh:mm: ss.SSS"!

Например, метод WNCNCApplicationCompletedQtyHelper.getOperationsSummary() возвращает время в формате:
Код:
dd:MM:yyyy hh:mm:ss

Функции работы с расчетами тегов: "getTagIntervalCalculation()", "getSimpleTagCalculation()", "getSimpleTagIntervalCalculation()" - возвращают время в формате
Код:
dd.MM.yyyy hh:mm:ss.SSS
Для работы с датами, возвращаемые методами указанные выше, стандартный метод SDK baseSdkUtils.toDateObject() - будет вызывать ошибку!
В данном случае, хотелось бы, чтобы все методы возвращали один и тот же формат даты! Ну или для работы с датами можно использовать библиотеку moment.js, которая уже имеется на всех страницах, особенно удобно для вывода даты и времени по любому шаблону, особенно если нужно выводить текущее число с ведущими нулями.





Создавать объект Date можно сразу передав строку с датой в конструктор, без использования статического метода Date.parse(), например 
Код:
var currentDate = new Date('2024-4-19 9:18:31.132')

Изменить дату объекта Data на предыдущий день можно ещё и таким способом:
Код:
currentDate.setDate(currentDate.getDate() - 1)





Функцию baseSdkUtils.toDateObject() предлагается изменить на указанную ниже, т.к. в текущей версии winnum-sdk-5.4.js если на вход передать строку с датой следующего формата: "yyyy-MM-dd hh:mmConfuseds.SSS", то при создании объекта Data будет ошибка из-за наличия символа точки и миллисекунд после! Предложенная далее функция сможет нормально проглотить все варианты дат стандартного формата дат.
Код:
function toDateObject(dateTimeString){        
   //var dateTimeString = "2010-8-9 1:2:3.22";
   //var dateTimeString = "2010-8-9 1:2:3";
   //var dateTimeString = "2010-8-9 1:2:3.22"; 
   var reggie = /(\d{4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2}).(\d{0,3})/;
   var dateArray = reggie.exec(dateTimeString);
   var dateObject = new Date(
      (+dateArray[1]),
      (+dateArray[2])-1, // Careful, month starts at 0!
      (+dateArray[3]),
      (+dateArray[4]),
      (+dateArray[5]),
      (+dateArray[6]),
      (+dateArray[7])
   );
        
   return dateTimeString;
}

Я рекомендую использовать библиотеку moment.js для работы с датами и временем.

Hello World!:

- Сообщений не найдено.
Ведущий инженер-программист, КРЭТ АО "РПЗ" (г. Раменское)
Ответ


Перейти к сообществу:


Пользователи, просматривающие эту тему: 1 Гость(ей)