Comment ajouter 10 jours à l'heure actuelle dans Rails


106

J'ai essayé de faire quelque chose comme

Time.now + 5.days

mais cela ne fonctionne pas, même si je me souviens vaguement d'avoir vu et d'être très impressionné par le fait de pouvoir faire quelque chose comme 2.yearsetc.

Comment faire cela dans Rails 3?


Cela devrait fonctionner. Quelle erreur obtenez vous?
cam du

Cela devrait fonctionner oui. Comme vous êtes dans les rails, Time.zone.now semble plus approprié
Ben

Réponses:


284

Utilisation

Time.now + 10.days

ou même

10.days.from_now

Les deux fonctionnent définitivement. Êtes-vous sûr que vous êtes dans Rails et pas seulement dans Ruby?

Si vous êtes définitivement dans Rails, d'où essayez-vous d'exécuter cela? Notez que le support actif doit être chargé.


@yuval ça marche sur des rails et non sur des rubis..Pensez que vous l'avez mais juste pour aider les autres
Catmandu

1
C'est tout simplement fantastique. Je m'aime du Ruby et des Rails.
wpp

5
Il y a une différence subtile. Time.now + 10.daysrécupère toujours le fuseau horaire de votre système alors que 10.days.from_nowle fuseau horaire UTC est sélectionné si rien n'est défini dans la configuration des rails.
Babistalikesflyingonrails

En règle générale, il est préférable d'utiliser Time.zone.nowà la place de Time.now.
x-yuri

21

days, years, Etc., font partie d' un soutien actif, donc cela ne fonctionnera pas irb, mais il devrait fonctionner rails console.


yeup - sur place. ne peut pas faire ça en rubis vanille.
Yuval Karmi

1
Fonctionne également en irb. Si vous avez installé le gem, faites simplement un require 'active_support/time'au début de la session ou avant d'utiliser ses commandes
darkdefender27

10

Cela fonctionne définitivement et je l'utilise partout où j'ai besoin d'ajouter des jours à la date actuelle:

Date.today() + 5

10

Quelques autres options, juste pour référence

-10.days.ago
# Available in Rails 4
DateTime.now.days_ago(-10)

Énumérez simplement toutes les options que je connais:

[1] Time.now + 10.days
[2] 10.days.from_now
[3] -10.days.ago
[4] DateTime.now.days_ago(-10)
[5] Date.today + 10

Alors maintenant, quelle est la différence entre eux si nous nous soucions du fuseau horaire:

  • [1, 4] Avec le fuseau horaire du système
  • [2, 3] Avec le fuseau horaire de configuration de votre application Rails
  • [5] Date seulement pas d'heure incluse dans le résultat

4

Essayez ceci sur des rails

Time.new + 10.days 

Essayez ceci sur Ruby

require 'date'
DateTime.now.next_day(10).to_time

2

Essayez ceci sur Ruby. Il renverra une nouvelle date / heure le nombre de jours spécifié dans le futur

DateTime.now.days_since(10)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.