2

使用 Ruby 如何确定即将到来的星期日是本月的第一个、第二个或第三个星期日?

4

1 回答 1

3

@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

如果您允许“即将到来的”星期日是今天,那么您将做同样的事情,但将七替换为零。您可以进行条件检查,也可以使用模数/余数运算符。

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

相关词汇...

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

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

于 2012-09-25T05:05:49.317 回答