不败君

前端萌新&初级后端攻城狮

PHP获取指定日期的开始及结束时间

PHP获取指定日期的开始及结束时间

2020-08-03 18:39:00

围观(3682)

在使用 ThinkPHP6 框架的时候, 如果使用数组拼接条件再使用 ORM 查询数据, 会有一种这样的情况:

假如需要筛选数据的 create_time(创建时间) 为大于 2020-08-03

数组是这样写的:

$where = [];
$where[] = ['create_time', '>=', '2020-08-03'];

可能和字段类型是 datetime 有关会出现无法筛选.

而这样可以正常筛选:

$where[] = ['create_time', '>=', '2020-08-03 00:00:00'];


而博主拿到的需求是: 获取前端传值 start_time(开始时间) 和 end_time(结束时间) 去筛选数据.

且前端传值是不会精准到时分秒的, 只会传两个值, 例如: 2020-08-03 , 2020-09-03.

所以后端在筛选的时候需要将这两个日期加上这一天的开始和结束时间.


博主写的解决方法:

function dateStartEnd($date)
{
    $time = strtotime($date);
    if (!$time) {
        return false;
    }

    $date = date('Y-m-d', strtotime($date));
    $time = strtotime($date);

    $start_date_time = date('Y-m-d H:i:s', $time);

    $end_time = $time + ( 24 * 60 * 60 -1 );
    $end_date_time = date('Y-m-d H:i:s', $end_time);

    return [
        'start_date_time' => $start_date_time,
        'end_date_time' => $end_date_time,
    ];
}

调用方法测试:

$data = dateStartEnd('2020-08-03');
echo json_encode($data);

// 获取准确的开始或结束时间可以这样:
// var_dump($data['start_date_time']);
// var_dump($data['end_date_time']);

返回:

{
    "start_date_time": "2020-08-03 00:00:00",
    "end_date_time": "2020-08-03 23:59:59"
}


有时候, 可能前端把精确到时分秒的数据也传值过来了, 当然使用本方法也是不会受影响的. 例如:

$data = dateStartEnd('2020-08-03 11:00:00');
echo json_encode($data);

返回结果同上.


这个方法考虑了其他一些情况, 如果前端传值的时间格式根本不对:

$data = dateStartEnd('2020-08-03 11');
echo json_encode($data);

此时只会返回 false.

本文地址 : bubaijun.com/page.php?id=203

版权声明 : 未经允许禁止转载!

评论:我要评论
发布评论:
Copyright © 不败君 粤ICP备18102917号-1

不败君

首 页 作 品 微 语