Existe-t-il une gemme ou quelque chose pour analyser les chaînes comme "4h 30m" "1d 4h" - un peu comme les estimations dans JIRA ou les planificateurs de tâches, peut-être, avec l'internationalisation?Comment analyser les jours/heures/minutes/secondes en ruby?
Répondre
Publier une 2ème réponse, comme chronique (que ma réponse originale suggéré) ne vous donne pas, mais horodatages plages temporelles.
Voici mon parti sur un analyseur.
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
La stratégie est assez simple. Diviser "5h"
en ["5", "h"]
, définir combien de secondes "h"
représente (TOKENS
) et ajouter cette quantité à @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
Il ne devrait pas être trop difficile ce qui en fait gérer "1.5h"
non plus, voir le code de base est aussi simple que.
Analyser quoi?
Cela va analyser dans un Hash:
"4h 30m".split(/\s/).each{|i| h[i.gsub(/\d+/,"")] = i.gsub(/\w/,"")}
Désolé. pas familiarisé avec JIRA ....
Vous pouvez utiliser chronic. Il peut analyser à peu près tout ce que vous y faites, y compris "hier", "la semaine dernière" etc.
Mise à jour: Comme l'OP le signale dans le commentaire, Chronic est pour les dates, pas pour les timespans. Voir mon autre réponse.
j'ai écrit cette méthode qui fait assez bien
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
chronic_duration
fait cela.
- 1. Comment analyser des documents Word avec ruby?
- 2. Analyser dans Ruby (on Rails)
- 3. Comment analyser les liens en sortie bash
- 4. Comment analyser en toute sécurité les flux multi-octets dans Ruby/Rails?
- 5. Analyser le document XML dans Ruby
- 6. Analyser une chaîne URL dans Ruby
- 7. Comment analyser les données RSS-CB en utilisant C#?
- 8. comment analyser les données en utilisant la demande ASIHttp?
- 9. Comment puis-je analyser JSON en Perl?
- 10. Comment analyser les fichiers GPX avec SAXReader?
- 11. Comment analyser une URL en C?
- 12. Comment analyser une chaîne en JavaScript?
- 13. jQuery ne peut pas analyser JSON généré avec Ruby-JSON
- 14. Analyser les sons
- 15. Comment analyser un flux
- 16. Comment analyser les retraits et les retraits avec pyparsing?
- 17. Comment analyser long négatif en hexadécimal en Java
- 18. Utiliser ruby et nokogiri pour analyser HTML en utilisant des commentaires HTML comme marqueurs
- 19. Comment analyser xml en ANSI ou Unicode en javascript?
- 20. Comment intégrer Ruby en C++?
- 21. Analyser html en utilisant C
- 22. Ruby soap4r construire les en-têtes
- 23. Comment analyser un fichier .xfa
- 24. Streaming, Daemons, Cronjobs, comment les utilisez-vous? (en Ruby)
- 25. Comment afficher les événements dans le calendrier en utilisant Ruby?
- 26. RAII dans Ruby (Ou, comment gérer les ressources dans Ruby)
- 27. Comment analyser les données codées de XML vers Excel
- 28. Comment analyser javascript pour les liens avec java?
- 29. Comment analyser une chaîne de date HTTP en Python?
- 30. RegEx (?) - comment analyser les codes postaux hors texte?
[Durée chronique] (https://github.com/hpoydar/chronic_duration) le fait mais est plus polyvalent et bien testé. – sj26