我正在创建一个应用程序,它允许您使用时间范围定义事件.我想在用户选择或更改开始日期时自动填写结束日期.但是,我无法弄清楚如何在两次之间找到差异,然后如何使用这种差异创建一个新的结束日期.
在JavaScript中,通过调用getTime()
方法或仅使用数值表达式中的日期,可以将日期转换为自epoc以来的毫秒数.
所以为了得到差异,只需减去两个日期.
要根据差异创建新日期,只需在构造函数中传递毫秒数.
var oldBegin = ... var oldEnd = ... var newBegin = ... var newEnd = new Date(newBegin + oldEnd - oldBegin);
这应该工作
编辑:修正了@bdukes指出的错误
编辑:
对于行为的解释,oldBegin
,oldEnd
,和newBegin
是Date
实例.调用运营商+
和-
触发的Javascript汽车铸件,并会自动调用valueOf()
这些对象的原型方法.碰巧该valueOf()
方法在Date
对象中实现为调用getTime()
.
所以基本上: date.getTime() === date.valueOf() === (0 + date) === (+date)
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对象的力量,但它实际上似乎是一颗定时炸弹
见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代码: