Javascript 计算日期差异,以小时、分钟和秒为单位计算差异——最好是通过js,否则是moment.js
我通过以下方式计算了日期差异:Javascript 计算日期差异,以小时、分钟和秒为单位计算差异——最好是通过js,否则是moment.js,javascript,date,momentjs,difference,Javascript,Date,Momentjs,Difference,我通过以下方式计算了日期差异: 将收到的unix日期转换为js日期 将当前日期保存为js日期 将两者连同其格式一起传递到moment.js以获得差异 转换为毫秒 毫秒的差值转换为一个瞬间,并返回小时分秒 我遇到了这样一个问题:特定版本的“时刻”解决了这个问题,其他版本在计算差异时在内部抛出异常作为nan。我很乐意使用简单的js,希望能绕过这个场景 上传了一个提琴,它不会运行,除非你注释掉瞬间部分,因为在cdn上找不到瞬间.js版本 我更关注逻辑和一些伪代码/语法,而不是一个工作示例。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);
Matt链接到了一个复制的for moment.js,因此这只是一个POJS解决方案 UNIX时间值为自历元起的秒,ECMAScript时间值为自同一历元起的毫秒。您所需要做的就是将两者转换为相同的单位(秒或毫秒),并将差值转换为小时、分钟和秒 假设2016-10-02T00:00:00Z的UNIX时间值为1475366400,因此要获得主机系统时区中从那时到现在的小时、分钟和秒数,请对从那时到现在的差异进行一些简单的数学计算:
var-then=1475366400,//2016-10-02T00:00:00Z的Unix时间值
now=Date.now(),//当前时间值(毫秒)
diff=now-then*1000,//以毫秒为单位的差异
符号=diff<0?'-':'';
差异*=符号=='-'-1 : 1;
var hrs=diff/3.6e6 | 0,
分钟=差异%3.6e6/6e4 | 0,
秒=差值%6e4/1e3;
//帮助器填充单个数字
函数z(n){return(nMatt已经链接到一个复制的for moment.js,所以这只是一个POJS解决方案
UNIX时间值是自历元起的秒,ECMAScript时间值是自同一历元起的毫秒。您只需将两者转换为相同的单位(秒或毫秒),并将差值转换为小时、分钟和秒
假设2016-10-02T00:00:00Z的UNIX时间值为1475366400,因此要获得主机系统时区中从那时到现在的小时、分钟和秒数,请对从那时到现在的差异进行一些简单的数学计算:
var-then=1475366400,//2016-10-02T00:00:00Z的Unix时间值
now=Date.now(),//当前时间值(毫秒)
diff=now-then*1000,//以毫秒为单位的差异
符号=diff<0?'-':'';
差异*=符号=='-'?-1:1;
var hrs=diff/3.6e6 | 0,
分钟=差异%3.6e6/6e4 | 0,
秒=差值%6e4/1e3;
//帮助器填充单个数字
函数z(n){return(对于moment.js解决方案,我将使用duration.asSeconds()
,然后将其传递到格式(“h:mm:ss”)
@varonton这样做有什么好处?感谢您的时间:)moment(moment.duration(ms.asSeconds()).format(“hh:mm:ss”)
这只是一个简单的方法。@Varonton,构造函数期望的是毫秒,而不是秒。而且,hh
将在12小时停止。您可以使用hh
24小时,但仍然有限。更完整的解决方案是。感谢您澄清@Matt Johnson!目前我将使用duration.asSeconds()
然后将其传递到格式(“h:mm:ss”)
@varonton这样做有什么好处?感谢您的时间:)瞬间(瞬间持续时间(ms.asSeconds()).format(“hh:mm:ss”)
这只是一个简单的方法。@Varonton,构造函数期望毫秒而不是秒。而且,hh
将在12小时停止。你可以使用hh
24小时,但你仍然有限。更完整的解决方案是。感谢你澄清@Matt Johnson!首先感谢你分享你的答案!关于这一行“diff*=sign='-'?-1:1;”我是否正确地认为它以以下方式执行:首先检查sign并赋值-1或1,然后将赋值乘以diff并赋值给diff.correct?在这一行中:“diff%6e4/1e3”“首先是模数,然后将其结果除以以下值。对吗?@JoeBorg对两个问题都是肯定的。对于第一个问题,它相当于Math.abs(diff)
,这可能是一种更好的书写方式。符号需要单独处理,否则您可能会得到类似-1:-23:-42的结果。首先感谢您分享您的答案!关于这一行,“diff*=sign='-'?-1我是否正确地认为它是以以下方式执行的:首先检查符号并赋值-1或1,然后将赋值乘以diff并赋值给diff.correct?在这一行中:“diff%6e4/1e3”首先是模数,然后是它的结果除以以下值。正确吗?@JoeBorg对这两个问题都是肯定的。对于第一个问题,它相当于Math.abs(diff)
,这可能是更好的书写方式。符号需要单独处理,否则可能会得到类似-1:-23:-42的结果。