2010-11-09 54 views
2

我试图生成一个时间对象,初始化为特定工作日的下一个实例和午夜过后的分钟数。生成时间对象从午夜开始的工作日和分钟数

我的数据(代表日程表)看起来像:周日,开始,结束。平日是一周中的0到6之间的一天,并且开始/结束是表示在该特定工作日午夜过去几分钟的整数。

我希望能够做的是在下次获得Time对象时,这样可以更灵活地使用前端开始/结束时间。

有谁知道如何做到这一点?我用Time.utc修饰没有太大的成功。

+0

如何显示一些示例日期和时间? – 2010-11-09 06:40:48

回答

1

不知道如果我正确地解释这...它那里给出一个工作日,你会找到那个工作日的下一个可用日期?例如,如果今天是星期二,并且您的日程安排为星期四,那么时间对象将在这个星期四午夜?如果是这样的话,这样的事情应该工作:

day_difference = @weekday - Time.now.wday 
# If the difference is in the past, then add 7 so that it is next week. 
if day_difference < 0 
    day_difference = day_difference + 7 
end 
next_date = Time.now.midnight + day_difference.days 
start_time = next_date + @start.minutes 
end_time = next_date + @finish.minutes 

平日是在你的日程安排对象的值。再一次,我不是100%确定你在问什么。这里start_time和end_time是代表下一个工作日的时间对象,并添加了相应的分钟数。

+0

这个窍门 - 我完全失败沟通正常,但你有想法!如果它已经开始,我确实使用if day_difference < 0 or (day_difference == 0 and self.start < ((Time.now.hour*60)+Time.now.min))去下一次。 – JamesHarrison 2010-11-09 16:09:53

1

可以为此做一些事情沿着这些路线的基本的东西,如下列:

class Schedule 
    attr_accessor :day_of_week, :start_minute, :finish_minute 

    def start(current_date = Time.zone.now) 
    current_date.beginning_of_week + day_of_week.days + start_minute.minutes 
    end 

    def finish(current_date = Time.zone.now) 
    current_date.beginning_of_week + day_of_week.days + finish_minute.minutes 
    end 

    def length 
    (finish_minute - start_minute).minutes 
    end 
end 

因为那是相当简陋的,我不知道你打算使用它,我建议什么看着一些this post ice_cube提到的库,和BUSINESS_TIME看起来他们是适用于你可能会想什么

+0

这对他的情况不起作用,因为day_of_week对应一天(例如:星期二= 2)。如果今天是星期一(1),则current_date + day_of_week.days会给出1 + 2,即星期三。你需要采取差异来找到合适的一天。 – pushmatrix 2010-11-09 06:43:27

+0

哎呀,忘了添加在'.beginning_of_week'感谢赶上 – Jeremy 2010-11-09 23:54:27

相关问题