bdu*_*kes 107 javascript date
我正在创建一个应用程序,它允许您使用时间范围定义事件.我想在用户选择或更改开始日期时自动填写结束日期.但是,我无法弄清楚如何在两次之间找到差异,然后如何使用这种差异创建一个新的结束日期.
Vin*_*ert 69
在JavaScript中,通过调用getTime()
方法或仅使用数值表达式中的日期,可以将日期转换为自epoc以来的毫秒数.
所以为了得到差异,只需减去两个日期.
要根据差异创建新日期,只需在构造函数中传递毫秒数.
var oldBegin = ...
var oldEnd = ...
var newBegin = ...
var newEnd = new Date(newBegin + oldEnd - oldBegin);
Run Code Online (Sandbox Code Playgroud)
这应该工作
编辑:修正了@bdukes指出的错误
编辑:
对于行为的解释,oldBegin
,oldEnd
,和newBegin
是Date
实例.调用运营商+
和-
触发的Javascript汽车铸件,并会自动调用valueOf()
这些对象的原型方法.碰巧该valueOf()
方法在Date
对象中实现为调用getTime()
.
所以基本上: date.getTime() === date.valueOf() === (0 + date) === (+date)
Dan*_*Dan 21
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');
Run Code Online (Sandbox Code Playgroud)
现在有一些陷阱.试试这个:
console.log(a - 10);
console.log(a + 10);
Run Code Online (Sandbox Code Playgroud)
因此,如果您有添加数字和日期的风险,请number
直接将日期转换为.
console.log(a.getTime() - 10);
console.log(a.getTime() + 10);
Run Code Online (Sandbox Code Playgroud)
我的第一个例子展示了Date对象的力量,但它实际上似乎是一颗定时炸弹
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);
}
Run Code Online (Sandbox Code Playgroud)
为您的HTML代码:
<div id="showTime"></div>
Run Code Online (Sandbox Code Playgroud)
如果您不关心时间部分,您可以使用.getDate()
和.setDate()
来设置日期部分。
因此,要将结束日期设置为开始日期后 2 周,请执行以下操作:
function GetEndDate(startDate)
{
var endDate = new Date(startDate.getTime());
endDate.setDate(endDate.getDate()+14);
return endDate;
}
Run Code Online (Sandbox Code Playgroud)
要返回两个日期之间的差异(以天为单位),请执行以下操作:
function GetDateDiff(startDate, endDate)
{
return endDate.getDate() - startDate.getDate();
}
Run Code Online (Sandbox Code Playgroud)
最后,让我们修改第一个函数,使其可以将 2nd 返回的值作为参数:
function GetEndDate(startDate, days)
{
var endDate = new Date(startDate.getTime());
endDate.setDate(endDate.getDate() + days);
return endDate;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
136747 次 |
最近记录: |