当前位置:  开发笔记 > 编程语言 > 正文

如何在JavaScript中获得两个日期之间的差异?

如何解决《如何在JavaScript中获得两个日期之间的差异?》经验,为你挑选了3个好方法。

我正在创建一个应用程序,它允许您使用时间范围定义事件.我想在用户选择或更改开始日期时自动填写结束日期.但是,我无法弄清楚如何在两次之间找到差异,然后如何使用这种差异创建一个新的结束日期.



1> Vincent Robe..:

在JavaScript中,通过调用getTime()方法仅使用数值表达式中的日期,可以将日期转换为自epoc以来的毫秒数.

所以为了得到差异,只需减去两个日期.

要根据差异创建新日期,只需在构造函数中传递毫秒数.

var oldBegin = ...
var oldEnd = ...
var newBegin = ...

var newEnd = new Date(newBegin + oldEnd - oldBegin);

这应该工作

编辑:修正了@bdukes指出的错误

编辑:

对于行为的解释,oldBegin,oldEnd,和newBeginDate实例.调用运营商+-触发的Javascript汽车铸件,并会自动调用valueOf()这些对象的原型方法.碰巧该valueOf()方法在Date对象中实现为调用getTime().

所以基本上: date.getTime() === date.valueOf() === (0 + date) === (+date)


不够清楚答案.如何应用`getTime()`?
OldBegin,oldEnd和NewBegin应该是`Date`对象吗?由于这里省略了变量声明,因此很难说它们应该是什么类型的对象.

2> Dan..:

JavaScript完美支持开箱即用的日期差异

var msMinute = 60*1000, 
    msDay = 60*60*24*1000,
    a = new Date(2012, 2, 12, 23, 59, 59),
    b = new Date("2013 march 12");


console.log(Math.floor((b - a) / msDay) + ' full days between');
console.log(Math.floor(((b - a) % msDay) / msMinute) + ' full minutes between');

现在有一些陷阱.试试这个:

console.log(a - 10);
console.log(a + 10);

因此,如果您有添加数字和日期的风险,请number直接将日期转换为.

console.log(a.getTime() - 10);
console.log(a.getTime() + 10);

我的第一个例子展示了Date对象的力量,但它实际上似乎是一颗定时炸弹


"陷阱"实际上是基于语言规范的默认值.减法运算符`-`强制参数为number,因此Date返回其时间值.`+`运算符被重载,因此可能会对数字或连接进行加法,强制.由于Dates在这种情况下强制转换为String,因此`+`进行连接.混淆不是Date对象的错,而是重载运算符.

3> tika..:

见JsFiddle DEMO

    var date1 = new Date();    
    var date2 = new Date("2025/07/30 21:59:00");
    //Customise date2 for your required future time

    showDiff();

function showDiff(date1, date2){

    var diff = (date2 - date1)/1000;
    diff = Math.abs(Math.floor(diff));

    var days = Math.floor(diff/(24*60*60));
    var leftSec = diff - days * 24*60*60;

    var hrs = Math.floor(leftSec/(60*60));
    var leftSec = leftSec - hrs * 60*60;

    var min = Math.floor(leftSec/(60));
    var leftSec = leftSec - min * 60;

    document.getElementById("showTime").innerHTML = "You have " + days + " days " + hrs + " hours " + min + " minutes and " + leftSec + " seconds before death.";

setTimeout(showDiff,1000);
}

为您的HTML代码:

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有