我有一个应用程序,每个用户都可以请求他们的假期。用户有两种类型,fixed
和temporary
。固定用户每年有24天的假期。临时用户会带来疑问。
临时用户每月增加工作2天,直到该年的12月31日为止。例如:
user1
于25/01/2019进入公司,直到2019年12月31日必须每月增加2天的工作时间,直到该日期为止,共22天。从2020年1月1日开始,这2天将从每个日历月开始增加,从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;
答案 0 :(得分:0)
不是一个很好的答案;评论太久了...
-今天是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”将替换为数据库中的一列。
答案 1 :(得分:-2)
首先,您需要编写一个查询,该查询将从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
作业。您可能需要添加last_modified_date
列以用作安全捕获,以防止在给定月份内多次更新用户。