首页 > 解决方案 > 使用 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>

标签: javascriptjquerymomentjs

解决方案


  • 将您的自定义日期字符串转换为有效的 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>


推荐阅读