javascript - 使用 jQuery 以毫秒计算两次时间
问题描述
我有两次
1. 04/20/2021 19:25:20.2522888 + 05:30
2. 04/20/2021 19:25:20.2692870 + 05:30
需要在 JavaScript 或 Jquery 中计算时间差
格式示例输出:0:0:0.002
var startTime = moment("12:16:59 am", "HH:mm:ss a");
var endTime = moment("06:12:07 pm", "HH:mm:ss a");
var duration = moment.duration(endTime.diff(startTime));
var hours = parseInt(duration.asHours());
var minutes = parseInt(duration.asMinutes()) - hours * 60;
alert(hours + ' hour and ' + minutes + ' minutes.')
var result = endTime.diff(startTime, 'hours') + " Hrs and " +
endTime.diff(startTime, 'minutes') + " Mns";
alert(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.2/moment.js"></script>
解决方案
- 将您的自定义日期字符串转换为有效的 ISO8601 格式
- 获取两个日期之间的毫秒差异
- 构建格式的自定义响应
h*:m:s.ms
const myDateFormatToISO8601 = str => {
const [M, D, Y, h, m, s, ms, tzh, tzm] = str.split(/\W+/);
const ms3 = Math.round(ms / 1e4); // Round ms to 3 integers
const ISO8601 = `${Y}-${M}-${D}T${h}:${m}:${s}.${ms3}+${tzh}:${tzm}`;
return new Date(ISO8601);
};
const calcDiff = (Date_a, Date_b) => {
const a = myDateFormatToISO8601(Date_a);
const b = myDateFormatToISO8601(Date_b);
const d = Math.abs(b - a);
const h = ~~(d / 36e5);
const m = ~~(d / 6e5) % 60;
const s = ~~(d / 1e3) % 60;
const ms = d % 1e3;
return `${h}:${m}:${s}.${ms}`;
};
// DEMO TIME:
const calculate = () => {
const a = document.querySelector("#a").value;
const b = document.querySelector("#b").value;
document.querySelector("#result").textContent = calcDiff(a, b);
};
document.querySelectorAll(".date").forEach(EL => EL.addEventListener("input", calculate));
calculate();
input {width: 90%;}
<input id="a" class="date" value="04/20/2021 19:25:20.1522888 + 05:30"><br>
<input id="b" class="date" value="04/20/2021 19:25:20.2692870 + 05:30">
<div id="result"></div>
推荐阅读
- mongodb - MongoDb中是否有删除字符串中间空格的功能?
- html - 提交后不正确无提示
- javascript - 如何在 Snake 游戏中检查碰撞,而不触发头块
- excel - 在 SQLite3 中导入 CSV 导致 INSERT 失败:数据类型不匹配
- variables - 如何根据现有字符串变量的子字符串在Stata中生成虚拟变量?
- python-3.x - Ubuntu脚本上的Python3 Selenium在无头时可见失败时工作
- c++ - 如何在c ++中将字符串转换为超过1位的int?
- dbt - 检测表以查看 CI 中的具体化变化
- sql-server - 数据库建模删除桥表
- material-ui - MUI 产生一堆空的样式块