代码之家  ›  专栏  ›  技术社区  ›  Satchel

在Rails中,如何确保一天是工作日?

  •  8
  • Satchel  · 技术社区  · 15 年前

    不过,虽然我还是想在周末发邮件,但如果下一周是周末,我希望它知道这一点,并把时间推到周一。

    我该怎么做?

    6 回复  |  直到 15 年前
        1
  •  15
  •   Marcin Urbanski    10 年前

    轨道5:

    date.on_weekend?
    date.on_weekday?
    

    date.saturday? || date.sunday?
    
        2
  •  13
  •   Magnar    15 年前

    这样地:

    sunday = 0
    saturday = 6
    weekend = [saturday, sunday]
    
    mail_date += 1.days while weekend.include?(mail_date.wday)
    
        3
  •  2
  •   Srikanth Jeeva    11 年前

    你可以用这个,

    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  
    
        4
  •  2
  •   rewritten    9 年前

    business_time 宝石( https://github.com/bokmann/business_time ),将彻底解决这一问题。这个图书馆可以让你适应不同的工作周(例如星期天到星期四),甚至可以检查工作时间是否超出工作时间。

    你的案子应该是

    def next_week
      0.business_days.after(7.days.from_now)
    end
    
        5
  •  1
  •   aarona    15 年前
    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
    

        6
  •  0
  •   Shreyas    15 年前

    您可以使用动作邮件程式伫列。你的邮件会被添加到队列中,无论何时你打电话 ActionMailer Queue's 方法,电子邮件将被发送。所以,基本上你可以在每个工作日调用这个方法。在周末,您的电子邮件将被添加到队列中,但不会被发送。星期一,当你调用方法时,你的邮件就会被发送。当然,您可以计划您的Action mailer方法调用,以便使用rake任务或Rufus调度程序每周自动调用。