我有一个应用程序,每个用户可以请求他们的假期。有两种类型的用户,fixed
和temporary
。固定用户每年有24天的假期。怀疑来自临时用户。
临时用户每月工作2天,直到当年12月31日。例如:
user1
于19/01年20月20日进入公司,直至19/12/2019,必须每月工作2天,直到该日为止,总共22天。截至01/01/2020,这两天将在每个日历月增加并从0开始,因此01/01/2020将有0天,01/02/2020将有2天。
是否有PHP
函数或MySQL
这两天自动将它们添加到数据库的过程?
在数据库中,我有一个user
表,其中包含以下字段:
name available_days start_date
======= ================= ============
user1 0 25/01/2019
对于那些必须增加日子的available_days
。
我有这个函数来计算自用户进入公司以来的月份差异,直到今天:
function difcurrentmonth($startdate){
$date = new DateTime($startdate);
$currentdate= (new DateTime)->format('Y-m-d H:i');
$finaldate = new DateTime($currentdate);
$dif = $date->diff($finaldate );
$month = ( $dif->y * 12 ) + $dif->m;
return $month;
}
$month = difcurrentmonth("2019-01-25");
$available_days= $month * 2;
不是一个答案;评论太久了......
- 今天是2019年2月21日。
- 临时员工于2018年8月15日开始工作。
- 应计假期于12月31日重置。
SELECT GREATEST('2018-08-15','2019-01-01') range_start
, '2019-02-21' range_end
, DATEDIFF('2019-02-21',GREATEST('2018-08-15','2019-01-01')) duration
, ROUND(DATEDIFF('2019-02-21',GREATEST('2018-08-15','2019-01-01'))/30,0) accrued;
+-------------+------------+----------+---------+
| range_start | range_end | duration | accrued |
+-------------+------------+----------+---------+
| 2019-01-01 | 2019-02-21 | 51 | 2 |
+-------------+------------+----------+---------+
在您的方案中,'2018-08-15'将替换为数据库中的列。
首先,您需要编写一个查询,从Qazxswpoi表中获取available_days
的User
。
我假设你在这个例子中使用user1
。
PDO
创建一个在每月的某一天运行的$stmt = $pdo_conn->prepare("UPDATE user SET available_days = available_days + 2 where [name] = :userName");
$stmt->bindParam(':userName', "user1");
$stmt->execute();
作业。您可能希望添加cron
列以用作安全捕获,以防止在给定月份内多次更新用户。