我正在使用Date.wday获取工作日编号,但是如何创建一个只有该编号的新日期(不使用Date.commercial)?我只需要下周的日期。例如,如果我有2(星期二),则新日期将是下周二的任何日期(2009-07-28)。谢谢!
答案 0 :(得分:3)
您可以将日期编号(例如2
)转换为日期名称,如下所示:
day_number = 2
Date::DAYNAMES[day_number]
# => 'Tuesday'
如果您安装了chronic gem,那么您可以对日期和时间进行很好的自然语言解析。例如:
Chronic.parse 'next tuesday' # it's currently Thursday, July 23
# => Tue Jul 28
结合它们,你可以做到
require 'chronic'
class MyClass
# returns a Date for the nth day of the week next week
def next_n_day(n)
Chronic.parse("next #{Date::DAYNAMES[n]}")
end
end
答案 1 :(得分:1)
查找下周二和今天之间的天数增量,然后使用日期#+
today = Date.today
future_wday = 2
delta_days = future_wday + 7 - today.wday
future_date = today + delta_days
p future_date.ctime # => "Tue Jul 28 00:00:00 2009"
答案 2 :(得分:0)
我怀疑你能做到这样的事情,你可以想象......
创建一个新的Date对象隐含地说,创建一个Date,而不是工作日......
为什么不去那一天并为它增加一周?
创建一个传递日期和工作日的方法,然后添加天数,直到获得所需的工作日,如果需要,可以添加1周以获得下周。
(对不起,我是C#develop,但我希望你能得到我所说的)
DateTime AddWeekFromDate(DateTime today, DayOfWeek week)
{
if(today.DayOfWeek == week)
return today.AddDays(7);
while (today.DayOfWeek != week)
today = today.AddDays(1);
return today;
}
使用
lbl.Text = AddWeekFromDate(DateTime.Now, DayOfWeek.Wednesday).ToLongDateString();
今天(2009年7月23日)的日期,它输出
Wednesday July 29th, 2009
答案 3 :(得分:-1)
我对Java一无所知,但我在其他语言中做了很多约会。如果你知道它总是会在一周后离开,那么你可以总是找出本周星期一的东西,然后在此基础上,将你的星期几和7添加到日期。所以在PHP中,我会选择:
$monday = (date('w', time()) == 1) ? strtotime("Today") : strtotime("Monday");
// This will give us a date variable of this Monday. The conditional bit is to avoid getting last Monday when today is Monday.
$day_number = $_POST['daynumb'];
// Or however the day of the week number gets into the mix.
$next_week = strtotime("+".$day_number + 7." days", $monday);
我知道这在语法和你需要的方面并不完美,但从逻辑上讲它应该以同样的方式运作。