это, по крайней мере, один способ - определить защитные знаки, которые позволят вам доказать, что машинопись действительно круг, нет «лучшего способа», это действительно зависит от варианта использования, но я чувствую, что это более сильный подход к приведению .
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;
}
Регистрация 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"
также, наблюдение кодовой базы так же просто как есть.
Синтаксический анализ, в какой, хотя?
Это проанализирует в Хеш:
"4h 30m".split(/\s/).each{|i| h[i.gsub(/\d+/,"")] = i.gsub(/\w/,"")}
Прошу прощения. не знакомый с JIRA....
Можно использовать хронический. Это может проанализировать в значительной степени все Вы trhow в нем, включая "вчера", "на прошлой неделе" и т.д.
Обновление: Как OP указывает в комментарии, Хронический для дат, не промежутков. См. мой другой ответ.
Я записал этот метод, который делает это вполне прилично
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