【问题标题】:Convert Ruby Date to Integer将 Ruby 日期转换为整数
【发布时间】:2011-05-28 09:54:09
【问题描述】:

如何将 Ruby 日期转换为整数?

【问题讨论】:

  • 这个整数应该代表什么?
  • 我需要显示一个图表。所以我想缩放日期。 MinDate 将为零。最大日期为 100
  • 然后,如我的解决方案所示,只需减去两个Date 对象即可得到它们之间的天数。如果您实际上是指日期/时间戳,您还可以减去 Time 对象(在这种情况下,您可以获得它们之间的秒数,或者您可以使用 DateTime 对象(在实例之间产生小数天数)。

标签: ruby-on-rails ruby datetime date


【解决方案1】:
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

【讨论】:

【解决方案2】:
Time.now.to_i

返回自纪元格式以来的秒数

【讨论】:

  • 我从日期对象而不是时间对象开始
  • 您可以使用my_date.to_timeDate 对象转换为Time 对象
  • 请注意to_time 将使用系统时区,因此您可能需要明确说明:my_date.to_time(:utc).to_i
【解决方案3】:

当您有任意 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"

【讨论】:

  • Token +1,但是你知道,Ruby 1.8 很快就会死掉。
  • 只要还有 1.8 的应用程序可以完成它们的工作,我就不相信 :)
【解决方案4】:

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

$ 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

【讨论】:

    【解决方案5】:

    我最近不得不这样做,花了一些时间才弄清楚,但这就是我找到解决方案的方式,它可能会给你一些想法:

    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。

    我之所以这样做,是因为我必须将当前日期与来自数据库的一些数据以这种格式和整数形式进行比较。希望对你有帮助。

    【讨论】:

    • 这是一个很好的解决方案,但是它产生的数字不能很好地扩展。由于事实上月份是 1-12,而天是 1-30。范围内会有差距。
    猜你喜欢
    • 2021-08-17
    • 2018-10-16
    • 2022-07-07
    • 1970-01-01
    • 2011-05-05
    • 2014-07-19
    • 2014-12-19
    相关资源
    最近更新 更多