YII2获得10年和5年后的日期

时间:2016-03-07 06:31:04

标签: mysql yii2-advanced-app

这是表结构。

tbl_staff

firstname varchar(50)
midname varchar(50)
lastname varchar(50)
...

tbl_staff2

first_day_of_service date
...

以下是该方案。 对于组织工作人员的前10年,他/她将获得忠诚奖,然后在他/她收到前10年后每5年获得一次。

我的初始代码只会获取员工的姓名和第一天的服务日期。

public function actionGet_loyalty() {

        $query = (new \yii\db\Query())
                ->select(['firstname', 'midname', 'lastname', 'first_day_service'])
                ->from('tbl_staff')
                ->limit(100)
                ->offset(0)
                ->orderBy('first_day_service')
                ->leftJoin('tbl_staff2', 'tbl_staff2.staff_id = tbl_staff.id');
        $command = $query->createCommand();
        $data = $command->queryAll();
        $string = "<table class='table table-striped'><tr><th>No.</th><th>Name</th><th>Date to Receive Loyalty Award</th></tr>";
        $i = 1;
        foreach ($data as $row) {
            $firstname = $row['firstname'];
            $midname = $row['midname'];
            $lastname = $row['lastname'];
            //$string.=$row['first_day_service'];
            $string.="<tr>"
                    . "<td>$i</td>"
                    . "<td>" . $firstname . " " . $midname[0] . ". " . $lastname . "</td>"
                    . "<td>" . $row['first_day_service'] . "</td>"
                    . "</tr>";
            $i++;
        }
        $string.="</table>";
        return $string;
    }

如何显示员工的所有姓名以及他/她将按升序收到奖励的日期。

或者根据日期对名称进行排序的任何mysql查询?

1 个答案:

答案 0 :(得分:1)

如果你想通过SQL查询来做,在MySQL中你可以使用DATE_ADD函数添加日期:

DATE_ADD(date, INTERVAL 5 YEAR)

检查this similar question

或使用DateTime modify方法通过PHP:

$dateTime = new DateTime($date);
$dateTime->modify('+ 5 years')->format('Y-m-d H:i:s');