31

我的 rails 应用程序中有一个 DailyQuote 模型,其中包含股票的日期价格。已为此模型捕获数据库中的数据,包括周末。周末价格值已设置为 0。

我想将周六和周日的所有周末价格更改为周五的价格。在 Ruby 中执行此操作的最佳方法是什么?要确定日期是在星期六还是星期日,并将其值更改为那个周末的星期五?

4

7 回答 7

55

TFM展示了一种识别星期几的有趣方法:

t = Time.now
t.saturday?    #=> returns a boolean value
t.sunday?      #=> returns a boolean value
于 2012-08-11T12:07:18.440 回答
24

最简单的方法:

today = Date.today

if today.saturday? || today.sunday? 
  puts "Today is a weekend!"
end

您也可以在一周中的任何其他日子执行此操作。Ruby 非常棒,并且提供了很多这样的酷方法。我建议当你被难倒时,通过运行.methods它来查看类可用的内容。因此,如果您运行Date.today.methods,您将看到这些可用。

于 2015-06-05T00:23:09.100 回答
21
require 'date'
today = Date.today
ask_price_for = (today.wday == 6) ? today - 1 : (today.wday == 0) ? today - 2 : today

或者

require 'date'
today = Date.today
ask_price_for = (today.saturday?) ? today - 1 : (today.sunday?) ? today - 2 : today  

ask_price_for现在保存一个您想要询问价格的日期。

获取与您日期相对应的实际价格取决于您的模型和您的 ORM 库(即 ActiveRecord)。

于 2012-08-11T12:00:22.663 回答
15
class Time
  def is_weekend?
    [0, 6, 7].include?(wday)
  end
end

time = Time.new

puts "Current Time : " + time.inspect
puts time.is_weekend?
于 2012-08-11T11:48:43.753 回答
5

从 Rails v5 开始:

Date.current.on_weekend?

参考:

于 2020-12-03T12:02:49.360 回答
4

Date.today.instance_eval { 星期六?|| 星期日?}

于 2015-08-24T07:27:12.707 回答
0

检查红宝石中两个日期范围内的周末(星期六和星期日)

 weekend_days = [0,6]
 if (start_date.to_date..end_date.to_date).to_a.select {|k| weekend_days.include?(k.wday)}.present?
    # you code
 end
于 2020-11-08T10:17:29.480 回答