php - 如何在PHP中减去两个没有星期日的日期

标签 php date datetime

我想用 php 或 cakephp 函数减去日期, 示例:

$date1 = '2016-05-19';
$date2 = '2016-05-23';

我想要减去没有星期日的日期,从示例中我想要的结果是 3,而不是 4,因为 4 - 1(星期日),

我已经尝试使用新的 Datetime php,如这段代码,

$receipt_date   = new DateTime($air_way_bill['AirWayBill']['receive_date']);
$date           = new DateTime($air_way_bill['AirWayBill']['date']);
$difference     = $receipt_date->diff($date);

但结果是 4,我如何在该范围内减去星期日? 有什么步骤或方法可以实现我的意思吗?

提前致谢...

[结案]:

正确答案:

// ============================= 1 ==================== //

$receipt_date   = new DateTime('2016-05-19');
$date           = new DateTime('2016-05-23');
$difference     = $receipt_date->diff($date);

$daterange = new DatePeriod($receipt_date, new DateInterval('P1D'), $date);

$count = 0;

foreach($daterange as $date){
    if(!($date->format("w"))) {
        $count++;
    }
}

echo ($difference->days)-$count;

//=============================================== ===//

// ============================= 2 ==================== //

function getSubtrackedDayCountWithoutSundaysButWithAllOtherDaysUsingDateTimeFunctions($startDate, $endDate)
{
    $days = $startDate->diff($endDate, true)->days;
    $sundays = intval($days / 7) + ($startDate->format('N') + $days % 7 >= 7);

    return intval($days)-Sundays;

}

//=============================================== ===========//

//===================== 这是我的实验 ===============//

        $date = date('Y-m-d', strtotime($air_way_bill['AirWayBill']['date']));
        $receive_date = date('Y-m-d', strtotime($air_way_bill['AirWayBill']['receive_date']));

        $date_diff = round(abs(strtotime($receive_date) - strtotime($date)) / 86400);
        $weeks  = round(abs(strtotime($receive_date) - strtotime($date)) / (86400 * 7));

         echo $date_diff - $weeks;

//=============================================== ===========//

非常感谢...

最佳答案

您可以查找总天数,然后查找该范围内的周日数。最后从总天数中减少这些天数:

<?php    
$receipt_date   = new DateTime('2016-05-19');
$date           = new DateTime('2016-05-23');
$difference     = $receipt_date->diff($date);

$daterange = new DatePeriod($receipt_date, new DateInterval('P1D'), $date);

$count = 0;

foreach($daterange as $date){
    if(!($date->format("w"))) {
        $count++;
    }
}

echo ($difference->days)-$count;

Demo

关于php - 如何在PHP中减去两个没有星期日的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37319845/

相关文章:

sql - Oracle 11g - FOR 循环仅将工作日插入表中?

date - 在jSTL中获取日期差异

python - Django 从 models.DateTimeField 获取月份

php - 使用 API 版本 3 在 Google 表格顶部插入行

Javascript 函数只运行一次

php - 特定网页启动偶尔会导致500内部错误

javascript - AngularJS:获取链接中没有散列的查询字符串值

javascript - 日期验证JS

php 时区格式的日期时间

python - Pandas 将分钟数字索引(0 到 1440)转换为日期时间