Javascript: преобразование строки, т.е. «1 час 2 минуты» на время в секундах - PullRequest
2 голосов
/ 24 апреля 2011

Я нашел много плагинов для такого рода функций с датой, таких как this , хотя я не смог найти что-то, что преобразует строку временного интервала ("2 мин" , «10 секунд», «1 час и 4 минуты» и т. Д.) До времени в секундах.

Есть идеи или плагины, о которых вы знаете? Спасибо.

Ответы [ 3 ]

2 голосов
/ 25 апреля 2011

Я бы написал функцию, которая постоянно совпадает с "(digit+) (timeUnit)" и выполняет арифметику в миллисекундах, потому что они являются более распространенными единицами. Как то так:

var timespanMillis = (function() {
  var tMillis = {
    second: 1000,
    min: 60 * 1000,
    minute: 60 * 1000,
    hour: 60 * 60 * 1000 // etc.
  };
  return function(s) {
    var regex = /(\d+)\s*(second|min|minute|hour)/g, ms=0, m, x;
    while (m = regex(s)) {
      x = Number(m[1]) * (tMillis[m[2]]||0);
      ms += x;
    }
    return x ? ms : NaN;
  };
})();

timespanMillis("2 mins"); // => 120000
timespanMillis("10 seconds"); // => 10000
timespanMillis("1 hour and 4 minutes"); // => 3840000
timespanMillis("Foobar"); // => NaN

Хитрость в том, чтобы синхронизировать объект поиска tMillis с регулярным выражением, но это не должно быть слишком сложно; например, вы можете создать регулярное выражение в замыкании, присоединив свойства tMillis в качестве исходной строки.

0 голосов
/ 23 апреля 2018

Я написал библиотеку с открытым исходным кодом MgntUtils на java (не javascript), которая частично отвечает этому требованию. Он содержит статический метод 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

0 голосов
/ 24 апреля 2011

Как только вы определились с форматом, вам нужно написать скрипт, который преобразует ваш формат времени в стандартный формат или просто извлекает необходимые числа из вашего формата.

После этого вы можете использовать конструктор даты для разбора даты, а затем записать get секунд из метода getTime ()

var d=new Date("October 12, 1987 10:23:00");
document.write(d.getTime() + " milliseconds since 1970/01/01");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...