如何减去日期时间对象的日期和时间?

时间:2014-12-09 17:43:59

标签: ruby-on-rails ruby datetime

这是我想要实现的目标 - 我已经设置了一个调度程序来执行每个星期五的午夜,它收集来自服务的数据,用于上周五00:00:00和结束时间的开始日期。周四23:59:59。因为它必须每个星期五工作,我不能硬编码日期,所以我想到尝试DateTime。

根据我的要求,如果我在这个星期五午夜开始工作,即在2014-12-12T03:00:00Z",那么我的开始日期应为" 2014- 12-05T00:00:00Z"我的结束日期应为" 2014-12-11T23:59:59Z"。

因此,为了获得开始和结束日期,我试图从我现在的对象中减去几天。这就是我试过的:

    now = DateTime.now
    p now.new_offset(0).to_s

    startDate = now - 7
    p startDate.new_offset(0).to_s

    endDate = now - 1
    p endDate.new_offset(0).to_s

这给了我正确的日期,但时间错了,即00:00:00的开始日期和23:59:59的结束日期,这将是03:00:00开始日期和结束日期03:00:00。

如何修改DateTime对象以获取开始日期与时间的开始日期和结束日期与时间结束的时间?

对不起我处理日期非常糟糕。在此先感谢!!

3 个答案:

答案 0 :(得分:1)

我认为您尝试做的事情更容易使用Date类:

require 'date'
start_date = (Date.today - 7).to_time
end_date = Date.today.to_time - 1

答案 1 :(得分:1)

您可以使用他beginning_of_dayend_of_day方法

1.9.3-p448 :001 > DateTime.now.beginning_of_day
 => Tue, 09 Dec 2014 00:00:00 +0300
1.9.3-p448 :002 > DateTime.now.end_of_day
 => Tue, 09 Dec 2014 23:59:59 +0300

答案 2 :(得分:0)

我会建议一个名为Whenever:https://github.com/javan/whenever

的宝石,而不是手动执行此操作

这是Ruby cron作业的简单DSL。

另请注意,DateTime具有beginning_of_dayend_of_day方法。