计算每月员工住宿的天数

 

说明:本系统把宿舍管理融合为一体系统处理:宿舍安排,水电费计算,宿舍管理可根据实际情况调配人员,很直观。最主要的是水电运算:刚开始考察的结果----按每间宿舍每月计算水电,不管是本月离职的,还是刚搬进的,还是月间调到其它宿舍的,都得要考虑计算进去,人工计算的时候,他们一般以10天为一个运算单位,这就是实际情况。我经过思考:首先计算出每间宿舍只要在这里住过的员工,不管是刚搬进的,还是离职搬出的,住过的天数。这样,得到每间宿舍的一个基数:即每间宿舍所有员工住宿的天数,再用水电总费用除以基数得出每天的平均基数,每个人的住宿天数和平均基数相乘就可以得出每人的水电费。 

 

 2009、3 龚德权

 

主要数据库脚本代码:计算每月员工住宿的天数

declare
@Param1 varchar(20)
set @Param1='2009-03'

select 入住人,NAME,GENDER,部门,TITLE,离职,宿舍编号,宿舍床号,宿舍性质,搬入时间,搬出时间,a.备注,时间段
,本月天数
,(case when 本月天数<=时间段 then 本月天数
       when 本月天数>时间段 then 时间段

end) 住宿天数,@Param1 as 年月
from (SELECT  宿舍编号,宿舍床号,宿舍性质,入住人,搬入时间,搬出时间,备注,
datediff(dd,

(case when 搬入时间<=cast(@Param1+'-01' as datetime) then cast(@Param1+'-01' as datetime)
       when 搬入时间>cast(@Param1+'-01' as datetime) then 搬入时间

end),搬出时间) as 时间段,
datename(dd,dateadd(dd,-1,dateadd(mm,1,cast(@Param1+'-01' as datetime)))) as 本月天数
 
FROM [kaoqing].[dbo].[宿舍日志] where  年月=@Param1
union all
SELECT 宿舍编号,宿舍床号,宿舍性质,入住人,搬入时间,搬出时间,备注,
datediff(dd,搬入时间,dateadd(dd,-1,dateadd(mm,1,cast(@Param1+'-01' as datetime)))) as 时间段,
datename(dd,dateadd(dd,-1,dateadd(mm,1,cast(@Param1+'-01' as datetime)))) as 本月天数
  FROM [kaoqing].[dbo].[宿舍管理]where 入住人<>'' and 备注 not like '%中午休息%'
) a,renshi_bm where renshi_bm.BADGENUMBER=a.入住人

可以使用Java的日期类库进行计算。以下是一个示例代码: ``` import java.time.LocalDate; import java.time.temporal.ChronoUnit; public class DaysBetweenMonths { public static void main(String[] args) { LocalDate date1 = LocalDate.of(2021, 3, 1); LocalDate date2 = LocalDate.of(2021, 6, 30); LocalDate firstDayOfMonth = date1.withDayOfMonth(1); int daysInFirstMonth = ChronoUnit.DAYS.between(date1, firstDayOfMonth.plusMonths(1)); System.out.println("Days in first month: " + daysInFirstMonth); LocalDate lastDayOfMonth = date2.withDayOfMonth(date2.lengthOfMonth()); int daysInLastMonth = ChronoUnit.DAYS.between(lastDayOfMonth, date2.plusDays(1)); System.out.println("Days in last month: " + daysInLastMonth); int fullMonthsBetween = date1.plusMonths(1).until(date2, ChronoUnit.MONTHS); for (int i = 0; i < fullMonthsBetween; i++) { LocalDate currentMonth = date1.plusMonths(i); int daysInCurrentMonth = currentMonth.lengthOfMonth(); System.out.println("Days in month " + (i + 1) + ": " + daysInCurrentMonth); } } } ``` 在这个示例中,我们使用了Java 8中引入的日期类库`java.time`。我们创建了两个`LocalDate`实例,分别表示3月1日和6月30日。 我们首先计算了第一个月的天数。为此,我们使用`withDayOfMonth`方法将日期设置为该月的第一天,然后使用`ChronoUnit.DAYS.between`方法计算与原始日期之间的天数。我们将这个天数打印出来。 接下来,我们计算了最后一个月的天数。为此,我们使用`withDayOfMonth`方法将日期设置为该月的最后一天,然后使用`ChronoUnit.DAYS.between`方法计算与原始日期之间的天数。我们将这个天数打印出来。 然后,我们计算了所有完整月份的天数。我们使用`plusMonths`方法和`until`方法计算两个日期之间的完整月份数。然后,我们使用一个循环来计算每个月的天数,并将它们打印出来。 这个示例代码的输出将是: ``` Days in first month: 31 Days in last month: 30 Days in month 1: 31 Days in month 2: 30 Days in month 3: 31 Days in month 4: 30 ``` 这表明3月1日到6月30日之间的第一个月有31天,最后一个月有30天,中间的四个完整月份分别有31天、30天、31天和30天。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值