如何在ColdFusion中按工作日(周一至周五)规则高亮日期对应表格行
这个需求完全可以实现,核心是先实现「两个日期之间仅统计周一到周五的工作日天数」的计算逻辑,再替换原有判断里的自然日天数变量即可。
第一步:实现工作日天数计算函数
先写一个ColdFusion自定义函数,用来计算收到日期到当前日期的工作日天数,自动排除周六、周日:
<!-- 自定义函数:计算两个日期之间的工作日天数(仅统计周一至周五) --> <cffunction name="getWorkDaysDiff" returntype="numeric" access="public"> <cfargument name="startDate" type="date" required="yes"> <cfargument name="endDate" type="date" required="yes" default="#now()#"> <cfset var workDays = 0> <cfset var currentDate = arguments.startDate> <cfloop condition="dateCompare(currentDate, arguments.endDate) <= 0"> <!-- dayOfWeek返回值规则:1=周日、2=周一...6=周六,排除周末两天 --> <cfif dayOfWeek(currentDate) neq 1 and dayOfWeek(currentDate) neq 7> <cfset workDays++> </cfif> <cfset currentDate = dateAdd("d", 1, currentDate)> </cfloop> <!-- 返回间隔的工作日天数,和原有DAYS_RECEIVED逻辑对齐 --> <cfreturn workDays - 1> </cffunction>
第二步:替换原有判断逻辑
把原有代码里的自然日变量DAYS_RECEIVED替换为上面函数计算出的工作日天数,按照你要求的「过去2个工作日高亮黄色」调整判断条件即可:
<!-- RECEIVED_DATE替换为你实际存储收到日期的变量名 --> <cfset WORK_DAYS_SINCE_RECEIVED = getWorkDaysDiff(RECEIVED_DATE)> <cfif ROUTING_NAME eq 'Inspection Required' and INSPECTION_STATUS eq 'NOT INSPECTED'> <!-- 超过3个工作日标红,可根据需求自行调整阈值 --> <cfif WORK_DAYS_SINCE_RECEIVED gt 3> <td title='Part' width="200" bgcolor="ff3333" align="center">#PART#</td> <!-- 刚好过去2个工作日标黄 --> <cfelseif WORK_DAYS_SINCE_RECEIVED eq 2> <td title='Part' width="200" bgcolor="FFFF00" align="center">#PART#</td> <cfelse> <!-- 其余情况使用默认样式 --> <td title='Part' width="200" align="center">#PART#</td> </cfif> </cfif>
如果后续需要排除法定节假日,只需要在函数的判断条件里增加一步,校验当前日期是否在你维护的法定节假日列表中即可。
内容的提问来源于stack exchange,提问作者mat1986
相关产品推荐
相关产品推荐

