algorithm - 计算总天数减去周末

标签 algorithm date

我需要获取自创建日期以来经过的天数。这个数字需要减去周末。我只有一些函数:JulianDay、JulianWeek、JulianYear 来获取 Julian 日期值,我还有 Today 返回今天的日期,时间戳返回日期和时间。我已经设法通过使用 JulianDay(today)-JulianDay(creation date) 来获得 today-creation date 的差异,但我仍然无法解决减去周末的问题

最佳答案

不完全确定您在问题中引用的功能是做什么的,但是,您似乎对 进行基本的日期算术以确定两个给定日期之间的天数。困难的部分似乎 计算周末减去多少天。

我想你可以用两个函数来完成这个:

  1. 给定两个日期,返回它们之间的天数。调用此 DAYS(date-1, date-2)
  2. 给定一个日期,返回星期几(其中 1 = 星期一 ... 7 = 星期日)。调用这个 DAY-OF-WEEK(date)

有了这些功能,您就可以执行以下操作:

  • 计算日期范围内的整周:WEEKS = DAYS(date-1, date2) mod 7
  • 计算天数而不是整周的一部分:DAYS-LEFT = DAYS(date-1, date-2) - (WEEKS * 7)
  • 确定最后一天是星期几:LAST-DAY = DAY-OF-WEEK(date-2)

调整部分周的 DAYS-LEFT 数如下:

if DAYS-LEFT > 0 then
  case LAST-DAY
    when 6 then /* Saturday */
      DAYS-LEFT = DAYS-LEFT - 1
    when 7 then /* Sunday */
      if DAYS-LEFT = 1 then
         DAYS-LEFT = 0
      else
         DAYS-LEFT = DAYS-LEFT - 2
      end-if
    when other /* Monday through Friday */
      case DAYS-LEFT - LAST-DAY
        when > 1 then
          DAYS-LEFT = DAYS-LEFT - 2
        when = 1 then
          DAYS-LEFT = DAYS-LEFT - 1
        when other
          DAYS-LEFT = DAYS-LEFT /* no adjustment */
       end-case
  end-case
end-if

DAYS-EXCLUDING-WEEKENDS = DAYS(date-1, date-2) - (WEEKS * 2) + DAYS-LEFT

我假设您拥有或可以构建一个 DAYS(date-1, date-2) 函数。下一位是确定星期几 给定的日期落在。执行此操作的算法称为 Zeller's congruence .我不会 在这里重复该算法,因为维基百科对它的描述做得很好。

希望这能让你上路......

关于algorithm - 计算总天数减去周末,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17474228/

相关文章:

java - 0-1 背包实现产生错误答案

java - 从 Java 中的格式化字符串中解析日期

PHP DATE逻辑问题

javascript - 如何在javascript中比较两个日期(月份名称年份数字)

c# - 为什么两个整数之间的除法结果会被截断?

Javascript快速排序二维数组

mysql - 结合SUB_DATE和TIMEDIFF在mysql中减去1小时

javascript - Angular 翻译和日期格式化程序 : how to translate month name?

Kinect SDK 用于计算关节方向的算法

algorithm - 二叉搜索树中的删除