将 Ruby 日期转换为整数

如何将 Ruby Date 转换为整数?

81315 次浏览
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
Time.now.to_i

从纪元格式开始返回秒

当你有一个任意的 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"

日期不能直接成为一个整数。例如:

$ 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)>

您可以选择将 Date 转换为 time,然后使用 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

我最近不得不这样做,并花了一些时间来弄明白它,但这就是我如何找到一个解决方案,它可能会给你一些想法:

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。

我喜欢这样做,因为我必须比较当前日期和一些数据来自数据库的格式和作为一个整数。希望能帮到你。