js计算两个日期相差的天数

JavaScript012

js计算两个日期相差的天数,第1张

这边写了代码,请保存为.html文件后测试

<html>

<body>

选择开始日期: <input type="date" id="start_date" />

选择结束日期: <input type="date" id="end_date" />

<hr/>

<button type="submit" onclick="end_date=new Date(document.getElementById('end_date').value)

start_date=new Date(document.getElementById('start_date').value)

document.getElementById('showhowmanyday').innerText=(end_date.getTime()-start_date.getTime())/(24*3600*1000)">计算两个日期相差的天数</button>

<h1 id="showhowmanyday"/>

</body>

</html>

你好,

首先来分析一个问题,两个日期是什么格式的?假设是字符串格式:

可能是:2018/04/20,也可能是:2018/04/20 12:00:00

那接下来分情况讨论。

首先看看不含时间部分的日期格式计算:

var aDate = new Date('2018/04/23') // 通过日期字符串,初始化第一个日期对象

var bDate = new Date('2018/04/25') // 同上,初始化第二个日期对象

var aDay = 24 * 60 * 60 * 1000 // 完整一天有24小时,将小时换算成毫秒时间戳

var diffDay = (bDate - aDate) / aDay // 计算间隔天数(注意日期隐式转换)

console.log(diffDay) // 2,23日-25日间隔2天

然后再来看看包含时间部分的日期格式计算:

var aDate = new Date('2018/04/23')

var bDate = new Date('2018/04/25 12:00:00') // 包含时间的日期字符串

var aDay = 24 * 60 * 60 * 1000

var diffDay = (bDate - aDate) / aDay

console.log(diffDay) // 2.5,自然计算的结果

console.log(Math.floor(diffDay)) // 2,根据个人情况向下取整,整数天

console.log(Math.ceil(diffDay)) // 3,根据个人情况向上取整,整数天

希望是你想要的结果,如有疑问请追问。

// 获取当前时间时间戳

var currentTime = Date.now()

// 获取指定时间时间戳

// 注1:这里写的是2012年9月1日0时0分0秒

// 注2:Javascript中月份是实际数字减1

var targetTime = (new Date(2012, 8, 1, 0, 0, 0)).getTime()

// 获取差值,如果指定日期早于现在,则为负数

var offsetTime = targetTime - currentTime

// 求绝对值,获取相差的时间

offsetTime = Math.abs(offsetTime)

// 将时间转位天数

// 注:Javascript中时间戳的单位是毫秒

var offsetDays = Math.floor(offsetTime / (3600 * 24 * 1e3))

可以写成通用的方法:

function getOffsetDays(time1, time2) {

    var offsetTime = Math.abs(time1 - time2)

    return Math.floor(offsetTime / (3600 * 24 * 1e3))

}

// 获取相隔天数

getOffsetDays(Date.now(), (new Date(2012, 8, 1)).getTime())