如何获得昨天的日期?


75

如何获得昨天的日期?

也许:

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

要么

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

要么

@get_time_now    = Time.now. / 86400 

86400 = 1天,对吗?(60 * 60 * 24)


10
并非所有的日子都长86400秒(夏令时更改的边界是+/- 1小时)。
蒂姆·彼得斯

Answers:


168

滑轨

对于日期对象,可以使用:

Date.yesterday

或时间对象:

1.day.ago

红宝石

或在铁轨外:

Date.today.prev_day

21
Time.now-1.day也可以,只是为了完整性而提及。
Gazler 2011年

2
@Gazler:不完全是。正如蒂姆·彼得斯(Tim Peters)前面提到的,一天24小时并不总是一样。
约根·

3
Date.yesterday会考虑时区,并且不会总是给出与Date.today-1.days相同的答案。
John Naegle 2012年

18
这是假设轨道而不是红宝石。不是最好的建议。
Mike Silvis 2013年

3
同意,这是Rails,而不是Ruby。
Marek Maurizio

14

经过尝试1.day.ago和变体之后:

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

如果发现Date.today.prev_day对我有用:

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

3
您可能没有使用Rails。ActiveSupport为您提供此功能
SirLenz0rlot 2014年

1
请注意,您还可以执行基本的日期算术,例如Date.today - 1
Dennis

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

要么

require 'date'

Date.today.prev_day

最清晰的香草红宝石Time.now - (3600 * 24)
cevaris

3
Time.now - (3600 * 24)不是昨天 并非全天都有24小时。
nmat

6

Ruby 2.1.2本地时间

回答:

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

证明:

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 

一日。

86400 = 1天(60 * 60 * 24)


4

使用Date.today-1.days。

日期。昨天取决于当前时间和您与格林尼治标准时间的偏移量

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

使用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 

或DateTime.yesterday

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

或者我们可以使用rails advance方法TimeDateTime

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 方法还提供了此选项 :years, :months, :weeks, :days, :hours, :minutes, :seconds

DateTime提前方法

时间提前方式


3

您可以从Time对象中减去86400以获得前一天的数据。如果您使用的是Rails或包含ActiveSupport,则可以将替换为86400 1.days

如果您使用的是Date对象而不是Time对象,则只需减去1。

要检查一个日期/时间是否早于另一个日期/时间,只需像对数字一样对两个对象进行比较:

DateTime.parse("2009-05-17T22:38:42-07:00") < DateTime.parse("2009-05-16T22:38:42-07:00")
# => false
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.