Как преобразовать дату Ruby в целое число?
Преобразование даты Ruby в Integer
Ответ 1
Вы не можете преобразовать дату в Ruby прямо в целое число. Если вы попробуете, вы получите:
$ Date.today.to_i
$ NoMethodError: undefined method 'to_i' for Wed, 06 Dec 2017:Date
Тем не менее вы можете повернуть дату в время, а затем получить номер из этого:
$ Date.today.to_time.to_i #=> 1512536400
Ответ 2
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
Ответ 3
Time.now.to_i
секунд с момента создания эпохи
Ответ 4
Решение для Ruby 1.8, когда у вас есть произвольный объект DateTime
:
1.8.7-p374 :001 > require 'date'
=> true
1.8.7-p374 :002 > DateTime.new(2012, 1, 15).strftime('%s')
=> "1326585600"
Ответ 5
Дата не может сразу стать целым числом. Пример:
$ 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