繁体   English   中英

计算日期差异,以小时分钟和秒为单位获取差异-理想情况下是用js,否则用moment.js

[英]calculate difference in dates, get difference in hours mins and seconds - ideally by js, otherwise moment.js

我设法通过以下方式计算日期差:

  1. 将收到的Unix日期转换为js日期,
  2. 将当前日期保存为js日期,
  3. 将它们都传递给moment.js及其格式以获取差异
  4. 转换为毫秒
  5. 以毫秒为单位的时差转换为力矩并返回小时,分钟,秒

我遇到了一个问题,即特定版本的moment可以解决这个问题,而当计算差异时,其他人会在内部将nan抛出异常。 很乐意仅使用普通js来完成此操作,希望能绕过这种情况。

上传了一个小提琴,除非您在当下注释掉了一部分,否则它不会运行,因为没有在CDN上找到moment.js版本。

我更喜欢逻辑和一些伪代码/语法,而不是工作示例。 JS版本的问题是,当两个Unix日期之间的计算出的差值随后转换为* 1000毫秒的日期时,它将变成1970年的日期。 js中的getMinutes()也会在该时间戳上获取原本的分钟数,而不是总分钟数,相同的小时数等等。

这是目前的JS示例:

var now = new Date(Date.now()),


ms = moment(then, "DD/MM/YYYY HH:mm:ss").diff(moment(now, "DD/MM/YYYY HH:mm:ss")),
  d = moment.duration(ms),
  formattedMomentDateDifference =  Math.floor(d.asHours()) + ":";
  formattedMomentDateDifference += Math.floor(d.minutes()) + ":";
  formattedMomentDateDifference += Math.floor(d.seconds());
  $('#momentdifference').val(formattedMomentDateDifference);

下面是js日期示例:

  var then = cleanedReceivedDate, //cleaned received date in unix
difference = Math.floor(then - now)*1000, /* difference in milliseconds */
msDifferenceInDate = new Date(difference),
hoursDiff = msDifferenceInDate.getHours(),
minutesDiff = "0"+msDifferenceInDate.getHours(),
secondsDiff = "0"+msDifferenceInDate.getSeconds(),
    formattedTime = hoursDiff + ':' + minutesDiff.substr(-2) + ':' + secondsDiff.substr(-2);
$('#jsdifference').val(formattedMomentDateDifference);

JS小提琴

Matt已链接到moment.js的副本,因此这只是一个POJS解决方案。

UNIX时间值是自该纪元以来的秒数,ECMAScript时间值是同一纪元以来的毫秒数。 您需要做的就是将两者都转换为相同的单位(秒或毫秒),并将时差转换为小时,分钟和秒。

例如,2016-10-02T00:00:00Z的UNIX时间值为1475366400,因此要获取从那时到现在的主机系统时区中的小时,分​​钟和秒,请进行一些简单的数学计算:

 var then = 1475366400, // Unix time value for 2016-10-02T00:00:00Z now = Date.now(), // Current time value in milliseconds diff = now - then*1000, // Difference in milliseconds sign = diff < 0? '-' : ''; diff *= sign == '-'? -1 : 1; var hrs = diff/3.6e6 | 0, mins = diff%3.6e6 / 6e4 | 0, secs = diff%6e4 / 1e3 ; // Helper to pad single digit numbers function z(n){return (n<10?'0':'') + n} console.log(sign + hrs + ':' + z(mins) + ':' + z(secs)); 

聚苯乙烯

new Date(Date.now())使用Date.now完全多余,结果与new Date()相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM