Как проанализировать дни/часы/минуты/секунды в рубине?

это, по крайней мере, один способ - определить защитные знаки, которые позволят вам доказать, что машинопись действительно круг, нет «лучшего способа», это действительно зависит от варианта использования, но я чувствую, что это более сильный подход к приведению .

const isHTMLCircle = (something: HTMLElement | SVGCircleElement): something is SVGCircleElement => {
    if(!something) return false;
    return something instanceof SVGCircleElement;
}

const getSvgCircleById = (id: string): SVGCircleElement | null => {
    const element = document.getElementById("id");
    if(!element) return null;
    if(isHTMLCircle(element)) {
        return element;
    }
    return null;
}
11
задан mannicken 18 March 2009 в 08:03
поделиться

5 ответов

Регистрация 2-го ответа, как хроническая (который мой исходный предложенный ответ) не дает Вам промежутки, но метки времени.

Вот мое движение на синтаксическом анализаторе.

class TimeParser
  TOKENS = {
    "m" => (60),
    "h" => (60 * 60),
    "d" => (60 * 60 * 24)
  }

  attr_reader :time

  def initialize(input)
    @input = input
    @time = 0
    parse
  end

  def parse
    @input.scan(/(\d+)(\w)/).each do |amount, measure|
      @time += amount.to_i * TOKENS[measure]
    end
  end
end

Стратегия довольно проста. Разделение "5h" в ["5", "h"], определите сколько секунд "h" представляет (TOKENS), и добавьте ту сумму к @time.

TimeParser.new("1m").time
# => 60

TimeParser.new("1m wtf lol").time
# => 60

TimeParser.new("4h 30m").time
# => 16200

TimeParser.new("1d 4h").time
# => 100800

Это не должно слишком трудно заставлять его обработать "1.5h" также, наблюдение кодовой базы так же просто как есть.

12
ответ дан 3 December 2019 в 02:41
поделиться

Синтаксический анализ, в какой, хотя?

Это проанализирует в Хеш:

"4h 30m".split(/\s/).each{|i| h[i.gsub(/\d+/,"")] = i.gsub(/\w/,"")}

Прошу прощения. не знакомый с JIRA....

1
ответ дан 3 December 2019 в 02:41
поделиться

Можно использовать хронический. Это может проанализировать в значительной степени все Вы trhow в нем, включая "вчера", "на прошлой неделе" и т.д.

Обновление: Как OP указывает в комментарии, Хронический для дат, не промежутков. См. мой другой ответ.

6
ответ дан 3 December 2019 в 02:41
поделиться

Я записал этот метод, который делает это вполне прилично

  def parse_duration(dur)
    duration = 0

    number_tokens = dur.gsub(/[a-z]/i,"").split
    times = dur.gsub(/[\.0-9]/,"").split

    if number_tokens.size != times.size
      raise "unrecognised duration!"
    else
      dur_tokens = number_tokens.zip(times)

      for d in dur_tokens
        number_part = d[0].to_f
        time_part = d[1]

        case time_part.downcase
        when "h","hour","hours"
          duration += number_part.hours
        when "m","minute","minutes","min","mins"
          duration += number_part.minutes
        when "d","day","days"
          duration += number_part.days
        when "w","week","weeks"
          duration += number_part.weeks
        when "month", "months"
          duration += number_part.months
        when "y", "year", "years"
          duration += number_part.years
        else
          raise "unrecognised duration!"
        end

      end

    end

    duration
  end
3
ответ дан 3 December 2019 в 02:41
поделиться

chronic_duration делает это.

9
ответ дан 3 December 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: