2011-06-27 17 views
55

¿Cómo puedo obtener la fecha de ayer?¿Cómo puedo obtener la fecha de ayer?

quizá:

@get_time_now = Time.now.strftime('%m/%d/%Y')/86400 

o

@get_time_now = Time.now.strftime('%m/%d/%Y') - 1.day 

o

@get_time_now = Time.now./86400 

86400 = 1 día, ¿verdad? (60 * 60 * 24)

+8

no todos los días son 86400 segundos de duración (límites de cambios de horario de verano son +/- 1 hora). –

Respuesta

134

Para un objeto de fecha se puede utilizar:

Date.yesterday 

o un objeto de tiempo:

1.day.ago 

o fuera de los carriles:

Date.today.prev_day 
+0

gracias. el problema está resuelto –

+14

** Time.now - 1.day ** también funciona, solo mencionando que está completo. – Gazler

+2

@Gazler: No del todo. Como Tim Peters mencionó anteriormente, las 24 horas no siempre son lo mismo que un día. –

3

Puede restar 86400 de un objeto Time para obtenerlo un día antes. Si está utilizando Rails o tiene ActiveSupport incluido, puede reemplazar 86400 con 1.days.

Si está utilizando un objeto Date, y no un objeto Time, solo resta 1 de él.

para comprobar si una fecha/hora es antes/después de otro, compara los dos objetos igual que lo haría para los números:

DateTime.parse("2009-05-17T22:38:42-07:00") < DateTime.parse("2009-05-16T22:38:42-07:00") 
# => false 
4

Use Date.today - 1.days.

Date.yesterday depende de la hora actual y el desplazamiento de GMT

1.9.3-p125 :100 > Date.today 
=> Wed, 29 Feb 2012 
1.9.3-p125 :101 > Date.yesterday 
=> Wed, 29 Feb 2012 
1.9.3-p125 :102 > Date.today - 1.days 
=> Tue, 28 Feb 2012 
14

Después de probar 1.day.ago y variantes en él:

irb(main):005:0> 1.day.ago 
NoMethodError: undefined method `day' for 1:Fixnum 

si Date.today.prev_day encontrado que funciona para mí:

irb(main):016:0> Date.today.prev_day 
=> #<Date: 2013-04-09 ((2456392j,0s,0n),+0s,2299161j)> 
+2

Probablemente no estés usando Rails. ActiveSupport le ofrece esta funcionalidad – SirLenz0rlot

+0

Tenga en cuenta que también puede hacer aritmética de fecha básica, por ejemplo 'Fecha.al día - 1' – Dennis

4

use DateTime.now - 1

1.9.3p194 :040 > DateTime.now 
=> Mon, 18 Nov 2013 17:58:45 +0530 
1.9.3p194 :041 > DateTime.now - 1 
=> Sun, 17 Nov 2013 17:58:49 +0530 

o DateTime.ayer

1.9.3p194 :042 > DateTime.yesterday 
=> Sun, 17 Nov 2013 

o podemos utilizar railsadvance método para Time y DateTime

1.9.3p194 :043 > Time.now.advance(days: -1) 
=> 2013-11-17 17:59:36 +0530 
1.9.3p194 :044 > DateTime.now.advance(days: -1) 
=> Sun, 17 Nov 2013 17:59:49 +0530 

advance método también proporciona estas opciones :years, :months, :weeks, :days, :hours, :minutes, :seconds

DateTime advance method

Time advance method

5

de Ruby 2.1.2 Tiempo nativo

Respuesta:

Time.at(Time.now.to_i - 86400) 

Prueba:

2.1.2 :016 > Time.now 
=> 2014-07-01 13:36:24 -0400 
2.1.2 :017 > Time.now.to_i 
=> 1404236192 
2.1.2 :018 > Time.now.to_i - 86400 
=> 1404149804 
2.1.2 :019 > Time.at(Time.now.to_i - 86400) 
=> 2014-06-30 13:36:53 -0400 

un día de segundos.

86400 = 1 día (60 * 60 * 24)

6
Time.now - (3600 * 24) # or Time.now - 86400 

o

require 'date' 

Date.today.prev_day 
+0

Lo más claro para vainilla ruby' Time.now - (3600 * 24) ' – cevaris

Cuestiones relacionadas