将Ruby Date转换为Integer

时间:2010-12-20 18:17:11

标签: ruby-on-rails ruby datetime date

如何将Ruby Date转换为整数?

5 个答案:

答案 0 :(得分:87)

t = Time.now
# => 2010-12-20 11:20:31 -0700

# Seconds since epoch
t.to_i
#=> 1292869231

require 'date'
d = Date.today
#=> #<Date: 2010-12-20 (4911101/2,0,2299161)>

epoch = Date.new(1970,1,1)
#=> #<Date: 1970-01-01 (4881175/2,0,2299161)>

d - epoch
#=> (14963/1)

# Days since epoch
(d - epoch).to_i
#=> 14963

# Seconds since epoch
d.to_time.to_i
#=> 1292828400

答案 1 :(得分:17)

日期不能直接变成整数。例如:

$ Date.today
=> #<Date: 2017-12-29 ((2458117j,0s,0n),+0s,2299161j)>
$ Date.today.to_i
=> NoMethodError: undefined method 'to_i' for #<Date: 2017-12-29 ((2458117j,0s,0n),+0s,2299161j)>

您可以选择将日期转换为一个时间,然后将一个Int,它将为您提供自纪元以来的秒数:

$ Date.today.to_time.to_i
=> 1514523600

或者想出一些你想要的其他数字,就像纪元一样:

$ Date.today.to_time.to_i / (60 * 60 * 24)  ### Number of seconds in a day
=> 17529   ### Number of days since epoch

答案 2 :(得分:9)

Time.now.to_i

自纪元格式以来

答案 3 :(得分:5)

当您拥有任意DateTime对象时,Ruby 1.8的解决方案:

1.8.7-p374 :001 > require 'date'
 => true 
1.8.7-p374 :002 > DateTime.new(2012, 1, 15).strftime('%s')
 => "1326585600"

答案 4 :(得分:0)

我最近不得不这样做,花了一些时间来解决,但这就是我遇到的解决方案,它可能会给您一些想法:

require 'date'
today = Date.today

year = today.year
month = today.mon
day = day.mday

year = year.to_s

month = month.to_s

day = day.to_s    


if month.length <2
  month = "0" + month
end

if day.length <2
  day = "0" + day
end

today = year + month + day

today = today.to_i

puts today

在这篇文章的日期,它将放置20191205。

如果月份或日期少于2位数字,则会在左侧添加0。

之所以这样做,是因为我不得不比较当前日期,并比较一些来自数据库的数据的格式和整数。希望对您有帮助。