首页 > 解决方案 > 计算两个日期时间对象或字符串之间的天数的最佳方法是什么?

问题描述

我有一个应用程序,允许用户预订假期/请假。它目前只允许日期输入并将日期作为日期对象存储在数据库中。但是,我需要添加用户预订半天的功能。我目前使用moment-business-days包来计算要带回/回馈给用户的假期数量。

我想到的一个想法是为 start_time 和 end_time 创建两个新字段,并且只允许用户选择 8:00 或 12:00 作为开始时间,并选择 12:00 或 17:00 作为开始时间时间结束。然后我会做类似下面的事情来计算总金额:

const m1 = moment('{admission}', 'DD-MM-YYYY HH:mm'); 
const m2 = moment('{discharge}', 'DD-MM-YYYY HH:mm'); 
const m3 = m2.diff(m1,'minutes'); 

const numdays = Math.floor(m3 / 1440); 
const numhours = Math.floor((m3 % 1440) / 60); 
const numminutes = Math.floor((m3 % 1440) % 60); 
const total = numdays + " day(s) " + numhours +"h " + numminutes +"m";

但是,如您所见,这将输出总天数、小时数和分钟数。我需要输出为整数或 0.5(例如 5 或 5.5)

谁能想到更好的解决方案?

标签: javascript

解决方案


我会使用常规的 Unix 时间戳,除以 1000 * 60 * 60 * 24,然后根据结果四舍五入。就像是

let date1 = new Date(2010, 6, 26, 11).getTime()
let date2 = new Date(2010, 6, 31).getTime()
let result;
let floatingDays = (date2 - date1) / (1000 * 60 * 60 * 24)

if (floatingDays % 1 === 0.5){
  result = floatingDays
} else if(floatingDays % 1 > 0.5){
  result = Math.ceil(floatingDays)
} else {
    result = Math.floor(floatingDays)
}

console.log(result)

当然,您需要确保date2大于date1,诸如此类的事情


推荐阅读