Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:是否有办法获取最接近周一到今天的日期对象?_Ruby On Rails_Date - Fatal编程技术网

Ruby on rails Rails:是否有办法获取最接近周一到今天的日期对象?

Ruby on rails Rails:是否有办法获取最接近周一到今天的日期对象?,ruby-on-rails,date,Ruby On Rails,Date,给定日期,如何在Rails中找到最近的星期一 我知道我可以做以下事情: 日期:明天 日期:今天 是否有类似Date.nearest:monday的内容?日期对象上的方法将允许您执行此操作。这个例子将在下周一告诉你 Date.commercial(Date.today.year, 1+Date.today.cweek, 1) 如果您需要下一个或上一个星期一(以最近的为准),您可以执行以下操作: Date.commercial(Date.today.year, Date.today.cwday.m

给定日期,如何在Rails中找到最近的星期一

我知道我可以做以下事情:

日期:明天 日期:今天

是否有类似Date.nearest:monday的内容?

日期对象上的方法将允许您执行此操作。这个例子将在下周一告诉你

Date.commercial(Date.today.year, 1+Date.today.cweek, 1)
如果您需要下一个或上一个星期一(以最近的为准),您可以执行以下操作:

Date.commercial(Date.today.year, Date.today.cwday.modulo(4)+Date.today.cweek, 1)

我现在无法执行此操作,因此如果出现语法错误,请原谅。

未经测试,因此您可能需要进行微调,但现在您可以:

def Date.nearest_monday
  today = Date.today
  wday  = today.wday
  if wday > 4 # over the half of the week
    today + (7 - wday) # next monday
  else
    today - (1 + wday) # previous monday
  end
end 

假设你想要两个方向:
Date.today.start\u of_week+7*(Date.today.wday/5)

这有点棘手,但不难计算

用于计算一周结束时,此方法接受用于指示一周开始日期的
开始日
参数(默认为
:周一
)。他们甚至实现了这个方法

诀窍如下:如果要计算最近的星期一,可以将其计算为从星期二开始的一周结束(星期二=>第一天,星期三=>第二天,…,星期一=>第七天,也是一周结束)

因此,您需要做的就是:

# it will return current date if today is Monday and nearest Monday otherwise
Date.today.end_of_week(:tuesday) 

我知道这是一个旧的线程,但它总是很好地保持它为未来的搜索者最新的

假设今天是8月19日星期五。我要做的就是得到最近的星期一:

monday = Date.today.monday
然后,你可以回到过去一周或向前一周,如下所示:

last_monday = monday.last_week
next_monday = monday.next_week

你需要往两个方向走吗?i、 e.如果是星期二,则转到昨天;如果是星期五,则转到下一个星期一?
。divmod(4)
返回一个数组。您可以使用
.divmod(4)[1]
.modulo(4)
;D@PeterWong谢谢你指出这一点。已经更正了,谢谢!很抱歉响应时间长了,假日!:-)这个答案加上文章的使用,对我来说是最好的方法