PHP 操作日期各种转换

时间:2024-06-01 19:41:09

日期操作

一、根据日期生成日期数组

/**
 * 根据指定日期生成日期数组
 * @param $start_time 开始时间
 * @param $end_time   结束时间
 * @return array     返回数组结果
 */
function createDateArr($start_time, $end_time)
{

    $open_start_time = $start_time;
    $open_end_time = $end_time;
    $stimestamp = strtotime($open_start_time);
    $etimestamp = strtotime($open_end_time);
    // 计算日期段内有多少天
    $days = ($etimestamp - $stimestamp) / 86400 + 1;
    // 保存每天日期
    $arr = [];
    for ($i = 0; $i < $days; $i++) {
        $arr[] = date('Y-m-d', $stimestamp + (86400 * $i));
    }
    return $arr;
}
//调用示例
$start_time='2024-05-12';
$end_time='2024-05-15';
$data=createDateArr($start_time,$end_time);
//结果
Array
(
    [0] => 2024-05-12
    [1] => 2024-05-13
    [2] => 2024-05-14
    [3] => 2024-05-15
)

二、根据指定日期获取月份数组

/**
 * 根据指定日期生成月份数组
 * @param $startDate
 * @param $endDate
 * @return array
 * @throws Exception
 */
function generateMonthlyArray($startDate, $endDate) {
    $start = new DateTime($startDate);
    $end = new DateTime($endDate);
    $end->modify('last day of this month');
    $interval = new DateInterval('P1M');
    $period = new DatePeriod($start, $interval, $end);

    $monthlyArray = array();
    foreach ($period as $month) {
        $monthlyArray[] = $month->format('Y-m');
    }
    return $monthlyArray;
}
//调用示例
$start_time='2024-05-12';
$end_time='2024-12-15';
$data=generateMonthlyArray($start_time,$end_time);
//结果
Array
(
    [0] => 2024-05
    [1] => 2024-06
    [2] => 2024-07
    [3] => 2024-08
    [4] => 2024-09
    [5] => 2024-10
)

三、周日期转换

时间转换

一、将日期转换成距今多长时间

/**
 * 将日期转换成距今多长时间
 * @param $show_time 日期时间
 * @param $now_time  当前时间
 * @return false|int|string
 */
function time_distance($show_time)
{
    if (!$show_time) {
        return '';
    }
    $show_time = (!is_numeric($show_time)) ? strtotime($show_time) : $show_time;
    $now_time = time();
    $dur = $now_time - $show_time;
    if ($dur < 0) {
        return $show_time;
    } else {
        if ($dur < 10) {
            return '刚刚';
        } else if ($dur < 60) {
            return $dur . '秒前';
        } else {
            if ($dur < 3600) {
                return floor($dur / 60) . '分钟前';
            } else {
                if ($dur < 86400) {
                    return floor($dur / 3600) . '小时前';
                } else {
                    return date_change($show_time);
                }
            }
        }
    }
}

//转变时间
function date_change($date)
{
    if (!$date) {
        return '';
    }
    $date = (!is_numeric($date)) ? strtotime($date) : $date;
    if (date('Ymd', $date) == date('Ymd', time())) {
        return date('H:i', $date);
    } else if (date('Ymd', $date) == date('Ymd', strtotime('-1 day'))) {
        return "昨天 " . date('H:i', $date);
    } else if (date('Y', $date) == date('Y', time())) {
        return date('m月d日', $date);
    } else {
        return date('Y年m月d日', $date);
    }
}
//示例
$start_time='2024-05-31 16:23:56';
$data= time_distance($start_time);
//结果
55分钟前
1小时前