2010-10-04 21 views

Répondre

9

Rails 5:

date.on_weekend? 
date.on_weekday? 

Rails 4:

date.saturday? || date.sunday? 
+0

J'aime ceux-ci! ça ressemble au samedi? et tout * en semaine *? La méthode est implémentée dans Ruby 1.9+, peut-être plus tôt, sur les classes Time et Date. Homme, cela aurait été utile de savoir il y a quelques années :) Merci @marcin – alassiter

+0

Oh je suppose que c'est dans le soutien actif? Je n'utilise pas de rails. – Angela

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 

Est-ce utile?

+0

Je ne savais pas ce qui est une caractéristique. Laisse-moi essayer. – Angela

13

Comme ceci:

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

mail_date += 1.days while weekend.include?(mail_date.wday) 
+0

Salut, je pense que je comprends, laissez-moi l'essayer .... – Angela

+0

Je reçois un résultat nul ....? – Angela

+0

semble fonctionner, merci! – Angela

0

Vous pouvez utiliser la file d'attente d'action Mailer. Vos mails sont ajoutés à une file d'attente et à chaque fois que vous appelez la méthode ActionMailer Queue's, les emails seront envoyés. Donc, fondamentalement, vous pouvez appeler cette méthode chaque jour de la semaine. Le week-end, vos e-mails seront ajoutés à la file d'attente mais ne seront pas envoyés. Le lundi, lorsque vous appelez la méthode, vos mails seront envoyés. Bien sûr, vous pouvez programmer vos appels de méthode d'envoi de courrier, appelés automatiquement chaque jour de la semaine à l'aide d'une tâche rake ou Rufus Scheduler.

2

Vous pouvez utiliser ce,

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

check ..

d = Date.today 
=> Mon, 04 Oct 2010 
d.weekday? 
=> true 
d = Date.today - 1 
=> Sun, 03 Oct 2010 
d.weekday? 
=> false 
2

Généralement, utilisez la gemme business_time (https://github.com/bokmann/business_time), qui résoudra ce problème de manière complète. Cette bibliothèque vous permettra de vous adapter aux différentes semaines de travail (du dimanche au jeudi par exemple) et même de vérifier si l'heure est en dehors des heures de travail.

Votre cas serait

def next_week 
    0.business_days.after(7.days.from_now) 
end 
+0

Oh c'est intéressant si ça marche. – Angela