J'ai été un peu gâté par l'API joda-time de:
DateTime now = new DateTime();
DateTime ninetyDaysAgo = now.minusDays(90);
J'essaye de faire une chose similaire dans Ruby, mais je suis
now = Time.now
ninetyDaysAgo = now - (90*24)
Cependant, le calcul n'est pas ici (je travaille vraiment avec des dates à minuit).
Existe-t-il une API conviviale pour la soustraction de date?
Date
autorise également les fractions, ce que vous pouvez faireDate.today - (90.0/24.0)
. Le résultat peut être facilement convertito_datetime
outo_time
aussi.Pour ceux qui utilisent Rails, consultez les éléments suivants:
la source
Si vous utilisez Rails ou que cela ne vous dérange pas d'inclure ActiveSupport, vous pouvez utiliser le DSL Numeric # days comme ceci:
Étant donné que vous travaillez avec des dates au lieu d'heures, vous devez également commencer par des instances de date ou convertir vos intances DateTime avec #to_date. Lors de l'ajout / de la soustraction de nombres d'instances de date, les nombres sont implicitement des jours.
la source
Ruby prend en charge l'arithmétique des dates dans les classes Date et DateTime , qui font partie de la bibliothèque standard de Ruby. Ces deux classes exposent les méthodes # + et # - , qui ajoutent et soustraient des jours à une date ou à une heure.
Utilisez les méthodes # << et # >> pour opérer sur des mois plutôt que sur des jours. L'arithmétique sur les mois est un peu différente de l'arithmétique sur les jours. L'utilisation de Date au lieu de DateTime rend l'effet plus évident.
En suivant votre exemple joda-time, vous pourriez écrire quelque chose comme ça en Ruby.
ou peut-être juste
la source
C'est un article très ancien, mais si vous vouliez conserver un
Time
objet, comme cela a été demandé à l'origine, plutôt que de passer à unDate
objet, vous voudrez peut-être envisager d'utiliserRuby Facets
.Ruby Facets est une bibliothèque standardisée d'extensions pour les classes Ruby principales.
http://rubyworks.github.io/facets/
En demandant des facettes, vous pouvez alors effectuer les opérations suivantes avec des objets Time.
Time.now.less(90, :days)
la source
utilisez le nombre de secondes:
la source
Solution simple:
la source