Come aggiungere 10 giorni all'ora corrente in Rails


106

Ho provato a fare qualcosa di simile

Time.now + 5.days

ma non funziona, anche se ricordo vagamente di aver visto e di essere rimasto molto colpito dall'essere in grado di fare qualcosa di simile 2.yearsecc.

Come posso farlo in Rails 3?


Dovrebbe funzionare. Che errore stai ricevendo?
cam

Sì, dovrebbe funzionare. Dato che sei su rails, Time.zone.now suona più appropriato
Ben

Risposte:


284

Uso

Time.now + 10.days

o anche

10.days.from_now

Entrambi funzionano decisamente. Sei sicuro di essere in Rails e non solo in Ruby?

Se sei sicuramente in Rails, da dove stai cercando di eseguirlo? Notare che Active Support deve essere caricato.


@yuval funziona su rotaie e non su rubino .. Pensa di averlo ottenuto ma solo per aiutare gli altri
Catmandu

1
Questo è semplicemente fantastico. Mi adoro un po 'di Ruby e Rails.
wpp

5
C'è una sottile differenza. Time.now + 10.dayspreleva sempre il fuso orario del sistema mentre 10.days.from_nowrileva il fuso orario UTC se non è impostato nulla in rails config.
Babistalikesflyingonrails

In generale, è meglio usare Time.zone.nowal posto di Time.now.
x-yuri

21

days, years, Ecc, sono parte integrante del sostegno attivo, quindi questo non funzionerà in irb, ma dovrebbe funzionare in rails console.


yeup - perfetto. non posso farlo con il rubino vaniglia.
Yuval Karmi

1
Funziona anche in irb. Se hai installato la gemma, fai semplicemente un require 'active_support/time'all'inizio della sessione o prima di usare i suoi comandi
darkdefender27

10

Funziona sicuramente e lo uso ovunque sia necessario aggiungere giorni alla data corrente:

Date.today() + 5

10

Alcune altre opzioni, solo per riferimento

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

Elenca solo tutte le opzioni che conosco:

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

Quindi ora, qual è la differenza tra loro se ci interessa il fuso orario:

  • [1, 4] Con fuso orario di sistema
  • [2, 3] Con config timezone della tua app Rails
  • [5] Solo data nessuna ora inclusa nel risultato

4

Prova questo su Rails

Time.new + 10.days 

Prova questo su Ruby

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

2

Prova questo su Ruby. Restituirà una nuova data / ora per il numero di giorni specificato nel futuro

DateTime.now.days_since(10)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.