8

我有一个名为 next_week 的消息替换,它基本上需要 Date.today + 7.days。

不过,虽然我还是想在周末发邮件,但是如果 next_week 正好是周末,我希望它知道这一点并推送到周一。

我该怎么做呢?

4

6 回答 6

17

导轨 5:

date.on_weekend?
date.on_weekday?

导轨 4:

date.saturday? || date.sunday?
于 2016-06-21T19:19:06.587 回答
13

像这样:

sunday = 0
saturday = 6
weekend = [saturday, sunday]

mail_date += 1.days while weekend.include?(mail_date.wday)
于 2010-10-04T04:45:23.247 回答
2

你可以使用这个,

def weekday?   
  (1..5).include?(wday)   
end  

查看 ..

d = Date.today   
=> Mon, 04 Oct 2010   
d.weekday?   
=> true   
d = Date.today - 1   
=> Sun, 03 Oct 2010   
d.weekday?   
=> false  
于 2010-10-04T06:06:29.417 回答
2

一般使用business_timegem(https://github.com/bokmann/business_time),可以完整解决这个问题。该库将允许您适应不同的工作周(例如周日至周四),甚至可以检查时间是否超出工作时间。

你的情况是

def next_week
  0.business_days.after(7.days.from_now)
end
于 2017-07-27T11:14:50.657 回答
1
mail_date = Date.today + 7.days
if mail_date.wday == 0
  mail_date += 1.day
elsif mail_date.wday == 6
  mail_date += 2.days
end

# now send your email on mail_date

这有帮助吗?

于 2010-10-04T04:43:00.833 回答
0

您可以使用 Action Mailer 队列。您的邮件被添加到队列中,每当您调用ActionMailer Queue 的方法时,都会发送电子邮件。所以,基本上你可以在每个工作日调用该方法。在周末,您的电子邮件将被添加到队列中,但不会被发送。星期一当您调用该方法时,您的邮件将被发送。当然,您可以安排您的 Action mailer 方法调用,使用 rake 任务或 Rufus Scheduler 每周自动调用。

于 2010-10-04T05:37:56.007 回答