前端需根据起止时间自动计算请假天数并提交,规则包括是否含首尾日、剔除周末/法定假日、支持半天等,须与后端对齐;示例函数通过遍历日期排除周末实现基础计算。

JavaScript 在接口请求中处理请假天数自动计算与提交,核心在于:前端先根据起止时间(含节假日/工作日逻辑)算出有效天数,再将结果连同其他字段一并提交给后端。是否跳过校验、是否支持半日、是否排除周末和法定假日,这些规则通常由后端定义,前端需严格对齐。
一、明确请假天数的计算规则
不能默认“结束日期 − 开始日期 + 1”。必须和业务方确认规则,例如:
- 是否包含开始日和结束日(一般都含)
- 是否剔除周六、周日
- 是否剔除国家法定节假日(需后端提供节假日列表或前端内置简易表)
- 是否支持半天(如上午/下午),此时天数可为 0.5
- 跨月、跨年是否影响计算(通常不影响,只看实际日期序列)
二、前端实现自动计算(示例:排除周末)
以下是一个轻量、不依赖外部库的计算函数,适用于大多数内部系统(暂不考虑节假日):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
function calculateLeaveDays(startDate, endDate) {
if (!startDate || !endDate || new Date(startDate) > new Date(endDate)) return 0;
const start = new Date(startDate);
const end = new Date(endDate);
let days = 0;
const current = new Date(start);
while (current
三、提交前整合数据并请求接口
计算完天数后,不要手动填入隐藏域再提交表单,建议统一构造请求体,用 fetch 或 axios 发送:
- 把用户选择的 start/end、类型(事假/年假)、备注等,和计算出的
days一起组成 JSON - 提交前做简单校验(如 days ≤ 0 提示重新选择)
- 接口返回成功后再跳转或提示,失败则显示后端具体错误(如“超出剩余年假额度”)
async function submitLeave() {
const start = document.getElementById('start-date').value;
const end = document.getElementById('end-date').value;
const type = document.getElementById('leave-type').value;
const remark = document.getElementById('remark').value;
const days = calculateLeaveDays(start, end);
if (days
四、注意事项与避坑点
实际开发中容易忽略但关键的细节:
- 时区问题:用户本地时间 vs 后端 UTC 时间。建议前后端约定统一用 YYYY-MM-DD 格式传日期字符串(不带时间),避免 new Date() 解析歧义
- 节假日需后端参与:前端硬编码节假日不可靠(每年调整),理想方式是提交时让后端复核并返回最终天数,前端仅做初步展示
- 实时响应体验:监听日期输入变化(input/change),自动重算并更新天数显示,提升交互感
- 服务端仍是权威:前端计算仅用于展示和初筛,所有业务规则(如审批流、额度控制)必须由后端校验并执行
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










