Я написал библиотеку с открытым исходным кодом MgntUtils на Java (не php), которая частично отвечает этому требованию. Он содержит статический метод parsingStringToTimeInterval(String value)
, который анализирует строку, которая, как ожидается, будет содержать некоторое значение временного интервала - числовое значение с необязательным суффиксом единицы времени. Например, строка «38s» будет проанализирована как 38 секунд, «24m» - 24 минуты, «4h» - 4 часа, «3d» - 3 дня и «45» как 45 миллисекунд. Поддерживаются суффиксы «s» для секунд, «m» для минут, «h» для часов и «d» для дней. Считается, что строка без суффикса содержит значение в миллисекундах. Суффиксы нечувствительны к регистру. Если предоставленная строка содержит неподдерживаемый суффикс или содержит отрицательное числовое значение или ноль или содержит не числовое значение, то генерируется исключение IllegalArgumentException. Этот метод возвращает класс TimeInterval - класс, также определенный в этой библиотеке. По сути, он содержит два свойства с соответствующими геттерами и сеттерами: long «value» и java.util.concurrent.TimeUnit. Но в дополнение к методам получения и установки этот класс имеет методы toMillis (), toSeconds (), toMinutes (), toHours () toDays (). Эти методы возвращают длинное значение в указанном масштабе времени (так же, как соответствующие методы в классе java.util.concurrent.TimeUnit)
Этот метод может быть очень полезен для анализа свойств временных интервалов, таких как тайм-ауты или периоды ожидания из файлов конфигурации. Это устраняет ненужные вычисления от различных временных масштабов до миллисекунд назад и вперед. Учтите, что у вас есть свойство methodInvokingInterval, которое необходимо установить на 5 дней. Таким образом, чтобы установить значение в миллисекундах, вам необходимо рассчитать, что 5 дней - это 432000000 миллисекунд (очевидно, это не невыполнимая задача, но раздражает и подвержена ошибкам), а затем любой, кто увидит значение 432000000, должен будет рассчитать его до 5 дней, которые расстраивает Но используя этот метод, вы получите значение свойства "5d" и вызовете код
long seconds = TextUtils.parsingStringToTimeInterval("5d").toSeconds();
решит вашу проблему конверсии. Очевидно, что это не слишком сложная функция, но она может добавить простоту и ясность в ваши файлы конфигурации и сэкономить некоторое разочарование и «глупый» просчет в ошибках миллисекунд. Вот ссылка на статью, которая описывает библиотеку MgntUtils и где ее взять: MgntUtils