L'itération entre les deux DateTimes, avec une heure de l'étape
Je suis à la recherche d'une manière efficace, en Ruby 1.9.x/Rails 3.2.x, pour itérer entre deux objets DateTime, avec une heure de l'étape.
('2013-01-01'.to_datetime .. '2013-02-01'.to_datetime).step(1.hour) do |date|
...
end
Je comprends qu'un problème, c'est que 1.hour
est juste le nombre de secondes, mais mes tentatives pour convertir un objet DateTime et de l'utiliser comme étape ne fonctionne pas non plus.
J'ai regardé "Méfiez-vous de Ruby Sucre". Il mentionne, à proximité du fond, qui DateTime directement step
méthode. J'ai confirmé cela en exécutant methods
sur un objet DateTime, mais je ne trouve aucune documentation sur step
dans DateTime, soit en Ruby ou Rails de documents.
Vous devez vous connecter pour publier un commentaire.
Similaire à ma réponse dans "Comment puis-je retourner un tableau de jours et d'heures à partir d'une gamme?", l'astuce est d'utiliser
to_i
de travailler avec les secondes depuis l'epoch:Noter que
Time.at()
convertit à l'aide de votre fuseau horaire local, de sorte que vous pouvez spécifier l'heure UTC en utilisantTime.at(date).utc
1.hour
et1.day
, mais pas si l'intervalle est1.month
. Comme1.month
est toujours de 30 jours dans les Rails.ruby date = DateTime.parse("2013-01-01"); finish = DateTime.parse("2015-02-01"); while(date < finish) do; puts Time.at(date); date += 1.month; end;
Peut-être en retard mais, vous pouvez le faire sans Rails, par exemple à l'étape avec les heures:
Ruby 2.1.0
Ou minutes:
J'espère que cela aide.
Voici quelque chose que j'ai trouvé récemment:
Je ne suis pas entièrement sûr si cela va aider, mais regardez ce débordement de pile de la page, la question semble similaire.
calculer la différence dans le temps en jours, heures et minutes