Javascript 使用jQuery以毫秒计算两次

Javascript 使用jQuery以毫秒计算两次,javascript,jquery,momentjs,Javascript,Jquery,Momentjs,我有两次 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=力矩(“12:16:59 am”,“HH:mm:ss a”); var endTime=力矩(“06:12:07 pm”,“HH:mm:ss a”); var持续时间=时刻持续时间(endTime.diff(sta

我有两次

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=力矩(“12:16:59 am”,“HH:mm:ss a”);
var endTime=力矩(“06:12:07 pm”,“HH:mm:ss a”);
var持续时间=时刻持续时间(endTime.diff(startTime));
var hours=parseInt(duration.asHours());
var minutes=parseInt(duration.asMinutes())-hours*60;
警报(小时+小时+分钟+分钟)
var结果=endTime.diff(开始时间,'小时')+“小时和”+
endTime.diff(开始时间,'分钟')+“Mns”;
警报(结果)
  • 将自定义日期字符串转换为有效的ISO8601格式
  • 获取两次约会的ms差异
  • h*:m:s.ms
const mydateformatoISO8601=str=>{
常数[M,D,Y,h,M,s,ms,tzh,tzm]=str.split(/\W+/);
const ms3=Math.round(ms/1e4);//将ms四舍五入为3个整数
常量ISO8601=`${Y}-${M}-${D}T${h}:${M}:${s}.${ms3}+${tzh}:${tzm}`;
返回新日期(ISO8601);
};
const calcDiff=(日期a、日期b)=>{
常数a=MyDateFormatoISO8601(日期a);
常数b=MyDateFormatoISO8601(日期b);
常数d=数学绝对值(b-a);
常数h=~(d/36e5);
常数m=~(d/6e5)%60;
常数s=~(d/1e3)%60;
常数ms=d%1e3;
返回`${h}:${m}:${s}.${ms}`;
};
//演示时间:
常量计算=()=>{
const a=document.querySelector(“#a”).value;
const b=document.querySelector(“#b”).value;
document.querySelector(“#result”).textContent=calcDiff(a,b);
};
document.queryselectoral(“.date”).forEach(EL=>EL.addEventListener(“输入”,计算));
计算()
输入{宽度:90%;}


您可以简单地使用
diff

var startTime=力矩(“19:25:20.2522888”,“hh:mm:ss.sss”);
var endTime=力矩(“19:25:20.2692870”,“hh:mm:ss.sss”);
var hrs=结束时间差(开始时间,“小时”);
var mins=endTime.diff(开始时间,“分钟”);
var secs=结束时间差(开始时间,“秒”);
var ms=endTime.diff(开始时间,毫秒);
log(${hrs}:${mins}:${secs}.${ms.toString().padStart(3,0)}')

这已经在@RahulShukla中得到了回答,这不符合我的预期。如果你想以
0:0:0.002
的格式显示,为什么要将其拆分为小时和分钟?如果日、月或年不同呢?@RokoC.Buljan OP中的两个示例都没有这个细节。而
0:0:0.002
的预期格式也没有考虑到这一点(据我所知是小时:分钟:秒:毫秒),通常
hh*
承担整个负载-因为没有更高的
ymd