【问题标题】:PHP Updating Array of Dates but exclude Weekends (Saturday and Sunday)PHP 更新日期数组但不包括周末(周六和周日)
【发布时间】:2013-12-02 15:00:59
【问题描述】:

我正在循环当前月份的一组天,以生成当天或之后的另一组天,这运行良好。我现在需要排除/省略周六或周日的任何日期。

我正在尝试确定是否可以检查周六/周日日期,例如:

date('N', strtotime($day)) >= 6);

使用我现有的生成数组的代码:

// Get days for current month
    $day = date("Y-m-d");
    $i = strtotime($day);

    array("year" => array("month" => array(days)));
    $allDays = array(
        date('Y', $i) => array(
            date('n') => range(date('d', $i), intval(date('t'))),
        ),
    );

不确定如何将周末日期的测试与此结合,或者我是否需要在这里使用 forloop 等?

【问题讨论】:

  • $i = time() 会为您节省大量浪费的 CPU 周期,因为您当前的“获取系统时间,将字符串转换为字符串,然后将字符串转换回时间”。是的,您需要一个循环,因为“范围”并非旨在“创建范围但跳过 X、Y、Z 值”。

标签: php date


【解决方案1】:

假设您尝试获取当前月份的除周末以外的所有天数:您可以使用 array_filter() 和回调来获取周末天数,然后使用 array_diff() 创建一个仅包含工作日的新数组:

$year = date('Y');
$month = date('n');

$weekend_days = array_filter($allDays[$year][$month], function($d) {
    return (date('N', strtotime(date("Y-m-$d"))) >= 6);
});

$allDays[$year][$month] = array_diff($allDays[$year][$month], $weekend_days);

print_r($allDays);

Demo.

【讨论】:

    【解决方案2】:

    您可以在将每个值添加到数组之前检查日期:

    if (!in_array(date('w', $i), array('0', '6')))
    {
        // add $i to array
    }
    

    【讨论】:

    • 他在哪里向数组添加任何东西?此外,$i 包含时间戳。
    • @AmalMurali $i 应该包含要在日期函数中使用的时间戳。我假设他正在根据描述“生成当前日期当天或之后的另一天数组”向数组添加一些内容
    猜你喜欢
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 2019-07-06
    • 1970-01-01
    相关资源
    最近更新 更多