将 Ruby 日期转换为整数
Posted
技术标签:
【中文标题】将 Ruby 日期转换为整数【英文标题】:Convert Ruby Date to Integer 【发布时间】:2011-05-28 09:54:09 【问题描述】:如何?
【问题讨论】:
这个整数应该代表什么? 我需要显示一个图表。所以我想缩放日期。 MinDate 将为零。最大日期为 100 然后,如我的解决方案所示,只需减去两个Date
对象即可得到它们之间的天数。如果您实际上是指日期/时间戳,您还可以减去 Time
对象(在这种情况下,您可以获得它们之间的秒数,或者您可以使用 DateTime
对象(在实例之间产生小数天数)。
Ruby/Rails: converting a Date to a UNIX timestamp的可能重复
【参考方案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
【讨论】:
在 Ruby 1.9.2 (ruby-doc.org/stdlib/libdoc/date/rdoc/classes/Date.html) 之前,我在核心文档中看不到to_time
:corelib.rubyonrails.org/classes/Date.html。此时,您可以使用to_i
。
Ruby 1.8.* 有解决方案吗?
@JellicleCat 你需要什么?将 Ruby 日期转换为时间?获取纪元以来的天数?获取自纪元以来的秒数?
自纪元以来的秒数。我知道我可以做到Time.utc(date.year, date.month, date.day)
。我希望有更优雅的外观。
自纪元以来的秒数示例错误。请参阅***.com/a/4492607/432。【参考方案2】:
Time.now.to_i
返回自纪元格式以来的秒数
【讨论】:
我从日期对象而不是时间对象开始 您可以使用my_date.to_time
将Date
对象转换为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。范围内会有差距。以上是关于将 Ruby 日期转换为整数的主要内容,如果未能解决你的问题,请参考以下文章
将标准 rails / ruby 时间转换为美国格式 - 日期混淆