2010-10-04 36 views

Trả lời

9

Rails 5:

date.on_weekend? 
date.on_weekday? 

Rails 4:

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

Tôi thích những điều này! nó trông giống như thứ bảy? và bất kỳ * ngày trong tuần * nào? phương thức được thực hiện trong Ruby 1.9+, có thể sớm hơn, trên các lớp Time và Date. Người đàn ông, điều đó sẽ hữu ích để biết một vài năm trước :) Cảm ơn @marcin – alassiter

+0

Oh Tôi cho rằng điều này đang được hỗ trợ tích cực? Tôi không sử dụng đường ray. – 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 

Điều này có hữu ích không?

+0

Tôi không biết một tính năng là gì. Để tôi thử. – Angela

13

Như thế này:

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

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

Xin chào, tôi nghĩ mình đã hiểu rồi, hãy để tôi thử ... – Angela

+0

Tôi nhận được kết quả nil ....? – Angela

+0

dường như hoạt động, cảm ơn! – Angela

0

Bạn có thể sử dụng Action Mailer Queue. Thư của bạn được thêm vào hàng đợi và bất cứ khi nào bạn gọi phương thức ActionMailer Queue's, các email sẽ được gửi. Vì vậy, về cơ bản bạn có thể gọi phương thức đó mỗi ngày trong tuần. Vào cuối tuần, email của bạn sẽ được thêm vào hàng đợi nhưng sẽ không được gửi. Vào thứ hai khi bạn thực hiện cuộc gọi đến phương thức, thư của bạn sẽ được gửi. Tất nhiên bạn có thể lên lịch cho các cuộc gọi phương thức gửi thư Hành động của bạn, được gọi tự động mỗi ngày trong tuần bằng cách sử dụng tác vụ cào hoặc Trình lập lịch biểu Rufus.

2

Bạn có thể sử dụng này,

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

kiểm tra ..

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

Nói chung, sử dụng đá quý business_time (https://github.com/bokmann/business_time), sẽ giải quyết vấn đề này một cách đầy đủ. Thư viện này sẽ cho phép bạn thích nghi với các tuần làm việc khác nhau (ví dụ như Chủ nhật đến Thứ Năm) và thậm chí kiểm tra xem giờ có vượt quá giờ làm việc hay không.

trường hợp của bạn sẽ

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

Điều này thật thú vị nếu nó hoạt động. – Angela

Các vấn đề liên quan