Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails计算时间差_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Rails计算时间差

Ruby on rails Rails计算时间差,ruby-on-rails,ruby,Ruby On Rails,Ruby,我尝试过这样的代码,但不起作用: require 'time_diff' cur_time = Time.now.strftime('%Y-%m-%d %H:%M') time_diff_components = Time.diff(@art.datetime_of_update, Time.parse(cur_time)) if @art.PRICEM.to_f >= eprice.to_f || @art.PRICEM.blank? && time_diff_com

我尝试过这样的代码,但不起作用:

require 'time_diff'

cur_time = Time.now.strftime('%Y-%m-%d %H:%M')
time_diff_components = Time.diff(@art.datetime_of_update, Time.parse(cur_time))
if  @art.PRICEM.to_f >= eprice.to_f || @art.PRICEM.blank? && time_diff_components[:hour] < 3 &&
需要“时间差异”
cur\u time=time.now.strftime(“%Y-%m-%d%H:%m”)
time\u diff\u components=time.diff(@art.datetime\u of\u update,time.parse(cur\u time))
如果@art.PRICEM.to_f>=eprice.to_f | |@art.PRICEM.blank?&&时间差分量[:小时]<3&&
但timediff为0,单位为db,时间如下所示:

2012-08-2819:53:12


如何计算现在和分贝之间的小时差

首先,你应该看看这两行:

cur_time = Time.now.strftime('%Y-%m-%d %H:%M')
time_diff_components = Time.diff(@art.datetime_of_update, Time.parse(cur_time))
为什么要格式化时间,然后只使用该值作为解析操作的输入?当然,写下以下文字会更简单,也不会那么脆弱:

time_diff_components = Time.diff(@art.datetime_of_update, Time.now)
我不知道为什么
Time.diff
对你不起作用(我不是Ruby开发人员),但如果目的是检查文章是否在“不到3小时前”更新,那么有一个更简单的方法:从当前时间中减去3小时,并将文章的更新时间与该限制进行比较:

limit_time = Time.now + 3.hours
if @art.PRICEM.to_f >= eprice.to_f || @art.PRICEM.blank? && @art.datetime_of_update >= limit_time

如果您不必精确,可以使用Rails的time\u ago\u in\u wordshelper

time_ago_in_words(Time.now - 3.hours)
#=> about 3 hours

当然,根据时差的不同,这也可以返回“分钟”、“天”等。

可能
limit\u time=time.now+3.hours
,因为OP使用Rails,所以
ActiveSupport
无论如何。@Michael:谢谢,编辑。这就是为什么回答Ruby问题对我来说是危险的。“我想我剩下的答案是合理的?”琼斯凯别担心,剩下的看起来不错。另外,您的方法没有错,只是不是最惯用的Rails代码。:-)@brabertaser1992:如果您希望在过去3小时内更新文章,那么是的…
未定义的时间方法'diff':Class
如果您只希望时间以小时为单位,那么
Time\u diff
不是您想要使用的库。只需将两个时间相减并除以
1.hour
即可,如果两个时间之间的差值为“1天2小时”,则
time\u diff\u components[:hour]
将为2(而不是26)。这听起来不像你想要的?是的,但请看Jon SkeetSure的解决方案,他给了你一个不使用时间的解决方案。diff:)