在数据库中自动增加天数

时间:2019-02-21 07:32:46

标签: php mysql

我有一个应用程序,每个用户都可以请求他们的假期。用户有两种类型,fixedtemporary。固定用户每年有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; 

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列以用作安全捕获,以防止在给定月份内多次更新用户。