确定Ruby中的哪个星期天

时间:2012-09-25 04:09:46

标签: ruby date-format

使用Ruby如何确定即将到来的星期日是该月的第一个,第二个还是第三个星期日?

1 个答案:

答案 0 :(得分:2)

@ElYusubov - 很接近,但不是很正确。

作为一个起点,分工必须是七(一周的天数)。但是time.day给出了从1到31的每月的一天,所以首先你需要在除法之前减去一个并在之后加一个。任何一个月的前八天都给...

Day number    (Day# - 1) / 7    Week#
----------    --------------    -----
         1      0.0             1
         2      0.14            1
         3      0.29            1
         4      0.43            1
         5      0.57            1
         6      0.71            1
         7      0.86            1
         8      1               2

无论哪一天的time.day给出,那个星期#表示它是那周的第一天,第二天等。但是你希望星期天

wday给出一个工作日 - 0到6,其中0表示星期日。那么即将到来的星期天有多少天?那么,这取决于你对“即将来临”的定义,但如果你今天排除==星期日,你基本上从7日减去今天的工作日。

Weekday today     Days until next Sunday
-------------     ----------------------
 0 (Sun)           7
 1 (Mon)           6
 2 (Tue)           5
 3 (Wed)           4
 4 (Thu)           3
 5 (Fri)           2
 6 (Sat)           1

如果你允许“即将来临”的星期天是今天,那么你做同样的事情,但用零代替七。您可以进行条件检查,也可以使用modulo / remainder运算符。

无论如何,一旦你知道即将到来的星期日还有多少天,你可以计算出它的日期值(将那些天数添加到今天的日期)然后确定该日期的月份而不是今天使用第一种方法(减1,除以7,加1)。

相关词汇......

Date.wday        0 to 6 (0 = sunday)
Date.day         1 to 31

我不会尝试提供代码,因为我不了解Ruby。