javascript - 2个日期时间时刻之间的时差

标签 javascript datetime momentjs

所以我有 2 个日期时间对象。

now = Nov 15 4:00 PM
later = Nov 15 6:00PM

我的目标是获取(上午 9 点到下午 5 点)之间的总小时数,给定现在和以后的时间。

结果答案应该是 1 小时。 (因为我只关心上午 9 点到下午 5 点之间的时间范围)

now =  Nov 15 6:00 AM
later = Nov 15 8:00 PM

结果答案应该是 8 小时。

是实现此目的的最佳方法,即使用 moment 中的 diff 函数并剥离小时并计算单个用例(当开始时间小于 9AM/开始时间大于 9AM 时)。同样结束时间(小于下午 5 点/大于 5 点)等?

还有如何解决这种情况,

now = Nov 15 9:00AM
later = Nov 18 2:00PM

结果答案应该是,

8(11 月 15 日)+8(11 月 16 日)+8(11 月 17 日)+5(11 月 18 日)= 29 小时

最佳答案

这是可行的解决方案

var now = moment("15 Nov 2016, 9:00:00 am", "DD MMM yyyy, h:mm:ss a").toDate();
var later = moment("18 Nov 2016, 2:00:00 pm", "DD MMM yyyy, h:mm:ss a").toDate();

function getWorkingHours(now, later) {
	var hoursToday = 0;

	var workingHourStart = 9;
	var workingHourEnd = 17;//5pm
	var workDuration = workingHourEnd - workingHourStart;
	
	if(workingHourEnd - getHours(now) > 0) {
		hoursToday = (workingHourEnd - getHours(now));
		hoursToday = (hoursToday > workDuration) ? workDuration : hoursToday;
	}

	var hoursLater = 0;

	if(getHours(later) - workingHourStart > 0) {
		hoursLater = (getHours(later) - workingHourStart);
		hoursLater = (hoursLater > workDuration) ? workDuration : hoursLater;
	}

	var actualDiffHours = (later.getTime() - now.getTime()) / (1000 * 60 * 60);
	var actualHoursInBetween = actualDiffHours - (24 - getHours(now)) - getHours(later);

	var workingHoursInBetween = (actualHoursInBetween / 24) * 8;
	
	return hoursToday + workingHoursInBetween + hoursLater;
}

function getHours(date) {
	var hours = date.getHours() + date.getMinutes() / 60 + date.getSeconds() / 3600 + date.getMilliseconds() / 3600/1000;
	return hours;
}

console.log(getWorkingHours(now, later));
<script src="http://momentjs.com/downloads/moment.min.js"></script>

关于javascript - 2个日期时间时刻之间的时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40619109/

相关文章:

python - Python 中的 datetime.now() 和 datetime.today() 有什么区别

SQL Server 按日期和时间分组

javascript - 月份 "May"不适用于 Moment.JS(包括 Fiddle)

javascript - 使用 Moment 验证默认的 Javascript 日期格式

javascript - 如何设置各个状态以在 ReactJs 中的 map 函数内呈现组件

javascript - 当我按BackSpace键时,弹出式弹出窗口就会消失

python - 如何使用mysql在数据库端声明默认高精度日期时间default + onupdate

asp.net - 将 DateTime 参数传递给 ASP.NET Web 服务

javascript - js正则表达式差异

javascript - React-router:如果 <Link> 处于事件状态,如何禁用它?