【问题标题】:Find weekday of a date given the month start weekday在给定月份开始工作日的情况下查找日期的工作日
【发布时间】:2014-10-09 20:06:03
【问题描述】:

如果 X = 该月开始的星期几(例如,本月为 4,或星期三)

Y = 一个月中的某一天(例如,21)

找到Z,即Y的工作日(1-7)

我认为这会起作用:

Z = (Y-X) % 7

在上面的示例中 Z = (21-4) % 7 = 3,这是正确的(10 月 21 日是星期二)

但 11 月 8 日失败:Z = (8-7) % 7 = 1,不正确,因为 11 月 8 日是星期六(工作日=7)。

那么什么是一个可靠的公式呢?

注意 - 我知道有 NSDate 实用程序可用于查找日期的工作日,但在这种情况下,我只知道上面给出的 X、Y。

【问题讨论】:

  • 你不能假设日期是在当年?
  • 您可以使用系统时钟/区域设置来获取年份吗?
  • 不,我将无法可靠地获得年份信息。我认为给定的 X,Y 应该足够了。
  • 试试 (date-1+firstdayofweek) % 7。还要记住 7%7 会给你 0 而不是 7。

标签: ios objective-c nsdate nscalendar


【解决方案1】:

如果不从零开始计数,则很难使用模运算。

所以让我们定义一些新变量:

W = X - 1 = 工作日编号,其中 W = 0 表示星期日

D = Y - 1 = 日期,从 0 开始

如果 W + D

所以取 (W + D) mod 7 得到 D 天的工作日数。加 1 以转换回星期日 = 1,所以 ((W + D) mod 7) + 1。

代入W和D的定义。

第 X 天的工作日数(其中星期日 = 1)= ((X - 1 + Y - 1) mod 7) + 1 = ((X + Y - 2) mod 7) + 1。

【讨论】:

    猜你喜欢
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    相关资源
    最近更新 更多