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?


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.


@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.


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

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

4

Experimente no Rails

Time.new + 10.days 

Experimente isso em Ruby

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

2

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

DateTime.now.days_since(10)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.