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.