Подтвердить что ты не робот

Преобразование даты Ruby в Integer

Как преобразовать дату Ruby в целое число?

4b9b3361

Ответ 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