Wie kann ich das gestrige Date bekommen?


74

Wie kann ich das gestrige Datum bekommen?

vielleicht:

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

oder

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

oder

@get_time_now    = Time.now. / 86400 

86400 = 1 Tag, richtig? (60 * 60 * 24)


9
Nicht alle Tage sind 86400 Sekunden lang (die Grenzen der Änderungen der Sommerzeit betragen +/- 1 Stunde).
Tim Peters

Antworten:


167

Schienen

Für ein Datumsobjekt können Sie Folgendes verwenden:

Date.yesterday

Oder ein Zeitobjekt:

1.day.ago

Rubin

Oder außerhalb von Schienen:

Date.today.prev_day

21
Time.now - 1.day funktioniert auch, der Vollständigkeit halber nur erwähnt.
Gazler

2
@ Gazler: Nicht ganz. Wie Tim Peters oben erwähnt hat, sind 24 Stunden nicht immer dasselbe wie ein Tag.
Jørgen Fogh

3
Date.yesterday berücksichtigt die Zeitzone und gibt nicht immer die gleiche Antwort wie Date.today - 1.days.
John Naegle

18
Dies setzt Schienen und nicht Rubin voraus. Nicht der beste Vorschlag.
Mike Silvis

2
Einverstanden, das ist Rails, nicht Ruby.
Marek Maurizio

14

Nach dem Ausprobieren 1.day.agound Varianten davon:

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

Wenn gefunden, Date.today.prev_dayfunktioniert das für mich:

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

3
Sie verwenden wahrscheinlich keine Schienen. ActiveSupport bietet Ihnen diese Funktionalität
SirLenz0rlot

1
Beachten Sie, dass Sie zum Beispiel auch grundlegende Datumsarithmetik durchführen könnenDate.today - 1
Dennis

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

oder

require 'date'

Date.today.prev_day

Am Time.now - (3600 * 24)
klarsten

3
Time.now - (3600 * 24)ist nicht gestern. Nicht alle Tage haben 24 Stunden.
nmat

6

Ruby 2.1.2 Native Time

Antworten:

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

Beweis:

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 

Ein Tag von Sekunden.

86400 = 1 Tag (60 * 60 * 24)


4

Verwenden Sie Date.today - 1.days.

Date.yesterday hängt von der aktuellen Uhrzeit und Ihrem Offset von GMT ab

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 

4

benutze 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 

oder DateTime.yesterday

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

oder wir können rails advanceMethode für Timeund verwendenDateTime

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 Methode bietet auch diese Optionen :years, :months, :weeks, :days, :hours, :minutes, :seconds

DateTime-Vorabmethode

Zeitvorlaufmethode


3

Sie können einfach 86400 von einem TimeObjekt subtrahieren , um es einen Tag zuvor zu erhalten. Wenn Sie Rails verwenden oder ActiveSupport enthalten ist, können Sie 86400 durch ersetzen 1.days.

Wenn Sie ein DateObjekt und kein TimeObjekt verwenden, subtrahieren Sie einfach 1 davon.

Um zu überprüfen, ob ein Datum / eine Uhrzeit vor / nach dem anderen liegt, vergleichen Sie einfach die beiden Objekte wie bei Zahlen:

DateTime.parse("2009-05-17T22:38:42-07:00") < DateTime.parse("2009-05-16T22:38:42-07:00")
# => false
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.