PHP获取当前季度的开始时间和结束时间

之前在网上找了一些获取季度开始时间和结束时间的算法,结果发现好多都是错误的
下面这个是我验证过的,目前没发现错误

$season = ceil((date('n'))/3);
$season_start = date('Y-m-d', mktime(0,0,0,$season*3-3+1,1,date('Y')));
$season_end = date('Y-m-d', mktime(23,59,59,$season*3,date('t',mktime(0,0,0,$season*3,1,date("Y"))),date('Y')));
print_r($season_start.'-'.$season_end);
本作品采用《CC 协议》,转载必须注明作者和本文链接
写这些文章的初衷只是记录一下自己的学习过程,避免自己忘记
讨论数量: 8

$currentMonth = date('n'); // 获取当前月份
$currentQuarter = ceil($currentMonth / 3); // 计算当前是第几个季度
$currentYear = date('Y'); // 获取当前年份

// 计算季度的开始时间
$quarterStart = date('Y-m-d', strtotime(($currentQuarter - 1) * 3 . ' months', strtotime("$currentYear-01-01")));

// 计算季度的结束时间
$quarterEnd = date('Y-m-d', strtotime(($currentQuarter * 3) . ' months -1 day', strtotime("$currentYear-01-01")));

echo "当前季度的开始时间:$quarterStart\n";
echo "当前季度的结束时间:$quarterEnd\n";

当前季度的开始时间:2023-04-01 当前季度的结束时间:2023-06-30

1年前 评论

感谢 @ 忆往昔弹指间 指出错误,重新修改下

function quarterRange($date = '') {
    $year = date('Y');

    $seasons = [
        1 => [$year . '-01-01', $year . '-03-31'],
        2 => [$year . '-04-01', $year . '-06-30'],
        3 => [$year . '-07-01', $year . '-09-30'],
        4 => [$year . '-10-01', $year . '-12-31'],
    ];

    $quarter = ceil(date('n', $date ? strtotime($date) : time()) / 3);

    return $seasons[$quarter] ?? null;
}

原回复

这不固定的吗?给个月份随便取

$y = date('Y');
$season = [
    [$y . '-01-01', $y . '-03-31'],
    [$y . '-04-01', $y . '-06-30'],
    [$y . '-07-01', $y . '-09-30'],
    [$y . '-10-01', $y . '-12-31'],
];

// 封装个函数,传个月份(这里有错误)
dd($season[ceil(date('n') / 3)]);

file

1年前 评论
全网第一菜鸡 (楼主) 1年前
kolin 1年前
忆往昔弹指间 1年前
lddtime (作者) 1年前

用Carbon包

echo Carbon::now()->startOfQuarter()->toDateString();
echo PHP_EOL;
echo Carbon::now()->endOfQuarter()->toDateString();
1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!