end_of_week返回不同的日期

时间:2015-04-13 15:42:28

标签: ruby-on-rails ruby date datetime

对于我正在进行的项目,我希望收集上周的开始和结束日期。我的星期从星期日开始,到星期六结束。

我想要的是什么:

如果今天是" Sun,2015年4月12日"或者" 2015年4月13日星期一",我上周的开始日期应为" Sun,2015年4月5日00:00:00"截止日期应为"星期六,2015年4月11日23:59:59"。我使用DateTime.now.beginning_of_week(:sunday).last_week(:sunday)获取开始日期,目前使用start_date + 6.days获取结束日期。但是我希望使用end_of_week方法来获取结束日期。

我尝试了什么:

DateTime.now.last_week.end_of_week(:sunday) and DateTime.now.beginning_of_week(:sunday).last_week.end_of_week(:sunday)

问题面临:

如果DateTime.now是"星期一,2015年4月13日",我得到正确的开始日期(" Sun,2015年4月5日00:00:00")和结束日期( "星期六,2015年4月11日23:59:59")。但是,如果我的DateTime.now是(" Sun,2015年4月12日和#34;)我的开始日期和结束日期变为("太阳,2015年3月29日00:00:00")到(& #34;周六,2015年4月4日23:59:59")。我的猜测是这种行为是因为红宝石周从星期一开始。但在我的情况下,我从周日开始一周,但我的日期不正确。

有没有办法可以使用end_of_week实现我想要的东西,或者我现在正在做的任何事情,以获得结束日期是最佳方式。

1 个答案:

答案 0 :(得分:2)

UPD 由于对原始问题的误解,答案发生了变化。

▶ dt = DateTime.parse "Sun, 12 Apr 2015"
#=> Sun, 12 Apr 2015 00:00:00 +0000
▶ [
▷   (dt - 1.week).beginning_of_week(:sunday), 
▷   (dt - 1.week).end_of_week(:sunday)
▷ ]
#=> [
#  [0] Sun, 05 Apr 2015 00:00:00 +0000,
#  [1] Sat, 11 Apr 2015 23:59:59 +0000
#]