我需要获取自创建日期以来经过的天数。这个数字需要减去周末。我只有一些函数:JulianDay、JulianWeek、JulianYear 来获取 Julian 日期值,我还有 Today 返回今天的日期,时间戳返回日期和时间。我已经设法通过使用 JulianDay(today)-JulianDay(creation date) 来获得 today-creation date 的差异,但我仍然无法解决减去周末的问题
最佳答案
不完全确定您在问题中引用的功能是做什么的,但是,您似乎对 进行基本的日期算术以确定两个给定日期之间的天数。困难的部分似乎 计算周末减去多少天。
我想你可以用两个函数来完成这个:
- 给定两个日期,返回它们之间的天数。调用此
DAYS(date-1, date-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/