Como adicionar 10 dias ao tempo atual no Rails

106

Eu tentei fazer algo como

Time.now + 5.days

mas isso não funciona, embora eu me lembre vagamente de ter visto, e de ficar muito impressionado, por ser capaz de fazer algo como 2.yearsetc.

Como faço isso no Rails 3?

Yuval Karmi
fonte
Isso deve funcionar. que erro você está tendo?
câmera de
Deve funcionar, sim. Como você está no trilho, Time.zone.now parece mais apropriado
Ben

Respostas:

284

Usar

Time.now + 10.days

ou mesmo

10.days.from_now

Ambos definitivamente funcionam. Tem certeza que está no Rails e não apenas no Ruby?

Se você definitivamente está em Rails, de onde está tentando rodar isso? Observe que o Active Support deve ser carregado.

gunn
fonte
@yuval funciona em trilhos e não em ruby ​​.. Pense que você conseguiu, mas apenas para ajudar os outros
Catmandu
1
Isso é simplesmente fantástico. Eu amo alguns Ruby e Rails.
wpp
5
Existe uma diferença sutil. Time.now + 10.dayssempre seleciona o fuso horário do sistema, ao passo 10.days.from_nowque seleciona o fuso horário UTC se nada estiver definido na configuração do rails.
Babistalikesflyingonrails
Geralmente, é melhor usar Time.zone.nowno lugar de Time.now.
x-yuri
21

days, yearsetc., fazem parte do Active Support. Portanto, isso não funcionará irb, mas deveria funcionar rails console.

Jonathan Julian
fonte
sim - local. não posso fazer isso em rubi de baunilha.
Yuval Karmi
1
Funciona no irb também. Se você tiver o gem instalado, basta fazer um require 'active_support/time'no início da sessão ou antes de usar seus comandos
darkdefender27
10

Isso definitivamente funciona e eu uso isso sempre que preciso adicionar dias à data atual:

Date.today() + 5
dj kaori
fonte
10

Algumas outras opções, apenas para referência

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

Apenas liste todas as opções que conheço:

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

Então agora, qual é a diferença entre eles se nos preocupamos com o fuso horário:

  • [1, 4] Com fuso horário do sistema
  • [2, 3] Com configuração de fuso horário do seu aplicativo Rails
  • [5] Data apenas sem hora incluída no resultado
Hieu Pham
fonte
4

Experimente no Rails

Time.new + 10.days 

Experimente isso em Ruby

require 'date'
DateTime.now.next_day(10).to_time
Rahul Patel
fonte
2

Experimente isso em Ruby. Ele retornará uma nova data / hora no número especificado de dias no futuro

DateTime.now.days_since(10)
Ramyani
fonte