0

0

动态计算到期日期:基于创建日期和月份数量的JavaScript实时更新

碧海醫心

碧海醫心

发布时间:2025-12-30 14:55:24

|

805人浏览过

|

来源于php中文网

原创

动态计算到期日期:基于创建日期和月份数量的JavaScript实时更新

本文介绍如何使用原生javascript监听日期和数字输入框的变化,自动计算并填充只读的“到期日期”字段,确保日期逻辑准确(如跨月天数处理),并兼容后端php数据提交。

在表单交互中,实现「创建日期 + 月份数 → 到期日期」的实时联动,是常见的业务需求(如合同、任务、订阅等场景)。关键在于:既要响应用户对任意一个输入项的修改(创建日期或月份数),又要正确处理日期边界问题(例如:1月31日加1个月不应变成2月31日,而应自动回退至2月28/29日)。

以下是一个完整、健壮的解决方案,仅依赖原生JavaScript,无需外部库:

Proface Avatarize
Proface Avatarize

一个利用AI技术提供高质量专业头像和头像的工具

下载

✅ HTML 结构(语义化 + 可访问)










✅ JavaScript 逻辑(含防错与边界处理)

// 获取 DOM 元素
const dateCreated = document.getElementById("date-created");
const amtOfMonths = document.getElementById("amt-of-months");
const dueDateInput = document.getElementById("due-date");
const form = document.getElementById("dateForm");

// 绑定双向变更监听(创建日期 & 月份数)
[dateCreated, amtOfMonths].forEach(el => {
  el.addEventListener("change", updateDueDate);
  // 同时支持实时输入(如键盘输入数字时即时响应)
  el.addEventListener("input", updateDueDate);
});

function updateDueDate() {
  // 确保两个字段均有有效值
  if (!dateCreated.value || !amtOfMonths.value || isNaN(amtOfMonths.value)) return;

  const dueDate = addMonths(dateCreated.value, parseInt(amtOfMonths.value, 10));
  // 使用 toISOString().split('T')[0] 确保输出格式为 YYYY-MM-DD( 所需标准)
  dueDateInput.value = dueDate.toISOString().split('T')[0];
}

// 安全的月份加法函数(自动处理月末日期溢出)
function addMonths(dateString, months) {
  const date = new Date(dateString);
  const originalDay = date.getDate();

  // 先加月份
  date.setMonth(date.getMonth() + months);

  // 若目标月份天数不足 originalDay(如 1月31日 + 1个月 → 2月31日无效),则设为该月最后一天
  if (date.getDate() !== originalDay) {
    date.setDate(0); // 0 日即上月最后一天
  }

  return date;
}

// ✅ 可选:表单提交前二次校验(增强可靠性)
form.addEventListener("submit", function(e) {
  if (!dueDateInput.value) {
    e.preventDefault();
    alert("请确保已填写创建日期和月份数量以生成到期日期。");
  }
});

⚠️ 注意事项与最佳实践

  • 日期格式兼容性 的 value 始终返回 YYYY-MM-DD 字符串,new Date() 能直接解析,无需额外格式化。
  • 月末逻辑:addMonths 函数通过 setDate(0) 回退至上月最后一天,精准处理如 2024-01-31 + 1 month → 2024-02-29(闰年)或 2023-01-31 + 1 month → 2023-02-28。
  • PHP 后端对接表单提交时,due-date 字段虽为 readonly,但会随表单一同发送;PHP 中可直接通过 $_POST['due-date'] 获取(建议在服务端再次校验逻辑一致性)。
  • 用户体验增强:添加 input 事件监听,使数字输入框在键入过程中即可响应(如输入 12 时,每按一次键都触发更新)。
  • 无障碍支持:所有

此方案轻量、可靠、无依赖,适用于任何现代浏览器,并为后续 PHP 数据入库提供了干净、标准化的日期字段。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

1911

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1249

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1152

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

948

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1399

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1229

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1439

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1303

2023.11.13

JavaScript 性能优化与前端调优
JavaScript 性能优化与前端调优

本专题系统讲解 JavaScript 性能优化的核心技术,涵盖页面加载优化、异步编程、内存管理、事件代理、代码分割、懒加载、浏览器缓存机制等。通过多个实际项目示例,帮助开发者掌握 如何通过前端调优提升网站性能,减少加载时间,提高用户体验与页面响应速度。

3

2025.12.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.1万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号