如何使用工作日编号创建新日期?

时间:2009-07-23 07:21:15

标签: ruby date

我正在使用Date.wday获取工作日编号,但是如何创建一个只有该编号的新日期(不使用Date.commercial)?我只需要下周的日期。例如,如果我有2(星期二),则新日期将是下周二的任何日期(2009-07-28)。谢谢!

4 个答案:

答案 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);

我知道这在语法和你需要的方面并不完美,但从逻辑上讲它应该以同样的方式运作。