【问题标题】:end_of_week returning different datesend_of_week 返回不同的日期
【发布时间】:2015-06-19 00:15:55
【问题描述】:

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

我想要什么:

如果今天是“2015 年 4 月 12 日星期日”或“2015 年 4 月 13 日星期一”,我上周的开始日期应该是“2015 年 4 月 5 日星期日 00:00:00”,结束日期应该是“11 日星期六” 2015 年 4 月 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 日”,我得到正确的开始日期(“星期日,2015 年 4 月 5 日 00:00:00”)和结束日期(“星期六,2015 年 4 月 11 日 23:59: 59")。但是,如果我的 DateTime.now 是(“Sun,2015 年 4 月 12 日”),我的开始日期和结束日期变为(“Sun,2015 年 3 月 29 日 00:00:00”)到(“Sat,2015 年 4 月 4 日 23:59:59 ”)。我的猜测是这种行为是因为 ruby​​ 中的一周从星期一开始。但就我而言,我从周日开始一周,但我仍然得到不正确的日期。

有没有一种方法可以使用 end_of_week 来实现我想要的,或者我现在正在做的任何事情来获得结束日期是最好的方法。

【问题讨论】:

  • 问得好!如果今天是星期天,返回明天的上周开始和结束日期怎么样?
  • 这是个好主意,但在某些情况下可能会失败。虽然我在示例中没有使用星期六,但如果今天是星期六,这将给我当前星期的日期。
  • 注意你可以写start_date + 6,而不是+ 6.days

标签: ruby-on-rails ruby date datetime


【解决方案1】:

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
#]

【讨论】:

  • 根据 ruby​​ 文档,end_of_week(#day) 说 #day 应该是一周的开始 - apidock.com/rails/v4.1.8/DateAndTime/Calculations/end_of_week,所以我把星期日放在 end_of_week(#day) 中。 end_of_week(:saturday) 给我星期五的日期。
  • 我正在寻找 2015 年 4 月 12 日星期日 00:00:00 到 2015 年 4 月 18 日星期六 23:59:59
  • 在我的帖子中添加了时间以避免混淆。
  • 谢谢@mudasobwa!如果我的 DateTime.now 是“Sun,2015 年 4 月 12 日”,我尝试了该解决方案并且有效。但是,如果我的 DateTime.now 更改为“2015 年 4 月 13 日星期一”,这会将我的开始日期返回为“2015 年 4 月 12 日星期日 00:00:00”,并将结束日期返回为“2015 年 4 月 18 日星期六 23:59:59”
  • 哦,对不起,伙计,我刚刚玩过last_week,并认为使用dt - 1.week 更安全。请查看更新;这并不完全符合您的要求,但至少它有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多