JavaScript如何实现指定日期与分钟数相加得到正确结果
问题原因
你现在的代码直接拿两个输入框取到的字符串做+运算,本质是执行字符串拼接,根本不是时间数值计算,肯定出不了正确结果。
实现逻辑
- 把拿到的起始时间字符串转成JS原生的
Date对象,拿到可参与运算的时间戳 - 把输入的累加分钟数转成数字类型,按1分钟等于60000毫秒的换算关系,和起始时间戳相加
- 把相加后得到的新时间,格式化成
YYYY-MM-DD HH:mm:ss的字符串格式,就是要的最终结果
修正后代码
<!-- 提前引入jQuery依赖 --> <!-- 页面输入结构示例 --> <input type="text" id="start" value="2022-07-13 08:22:22"> <input type="text" id="process" value="50"> <button onclick="myFunction()">计算累加后时间</button> <script> // 数字补零工具,保证月、日、时、分、秒都是两位 function addZero(num) { return num < 10 ? '0' + num : num } function myFunction() { // 读取输入值 const startStr = $("#start").val(); const processMin = Number($("#process").val()); // 起始时间转Date对象,横杠换斜杠是为了兼容所有浏览器的时间解析 const startDate = new Date(startStr.replace(/-/g, '/')); // 时间累加:时间戳 + 分钟转成的毫秒数 const totalStamp = startDate.getTime() + processMin * 60 * 1000; const totalDate = new Date(totalStamp); // 拼接成要求的时间格式 const total = `${totalDate.getFullYear()}-${addZero(totalDate.getMonth()+1)}-${addZero(totalDate.getDate())} ${addZero(totalDate.getHours())}:${addZero(totalDate.getMinutes())}:${addZero(totalDate.getSeconds())}`; // 示例参数下输出为 2022-07-13 09:12:22,和预期一致 alert(total); } </script>
注意点
- 不要直接对时间字符串做算术运算,必须先转成时间戳(数字类型)再计算
- 解析带横杠的时间字符串时,最好把横杠替换成斜杠,避免部分浏览器解析失败返回Invalid Date
- 格式化时间的时候月、日、时、分、秒小于10的时候要补前导零,不然会出现
2022-7-13 9:2:2这种不符合格式要求的结果
内容的提问来源于stack exchange,提问作者Nest
相关产品推荐
相关产品推荐

