Конвертировать Ruby Date в Integer - PullRequest
       11

Конвертировать Ruby Date в Integer

55 голосов
/ 20 декабря 2010

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

Ответы [ 4 ]

87 голосов
/ 20 декабря 2010
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
17 голосов
/ 29 декабря 2017

Дата не может напрямую стать целым числом. Пример:

$ 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.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
9 голосов
/ 20 декабря 2010

Time.now.to_i

секунды с начала эпохи

5 голосов
/ 03 ноября 2013

Решение для 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"
...