如何计算PHP两天给定两天的天数

  • 本文关键字:两天 PHP 何计算 计算 php
  • 更新时间 :
  • 英文 :


我如何制作一种如何计算两个给定天之间天数的方法?

例如,我想知道星期一和星期四之间有多少天。所以我这样计算了。

制作了一个数组,并检查周一和周四的值差。是1 - 4 = -3。忽略负符号,我们得到了3。因此,如果我们在当前日期添加3,那么显然我们有星期四的日期。我无法工作的是,如果我有一个需要计算SundayWednesday之间的天数的场景。通过应用上述技术,我们获得了7 - 3 = 4,如果我们将4天添加到当前日期,那么我们绝对不会获得Wednesday。有人可以帮我吗?不确定需要应用链接列表或什么。需要帮助。

如果第一天大于第二天值,则需要抵消7。尝试这样的东西 -

function dayDiff($start,$end){
   $weekDays = [
            'Mon' => 1,
            'Tue' => 2,
            'Wed' => 3,
            'Thu' => 4,
            'Fri' => 5,
            'Sat' => 6,
            'Sun' => 7,
    ];
  return ($weekDays[$start] < $weekDays[$end]) ? $weekDays[$end]-$weekDays[$start] : abs($weekDays[$start]-$weekDays[$end]-7);
}

这将导致 -

echo "Mon -> Thu : ".dayDiff("Mon","Thu"); //returns 3
echo "Sun -> Wed : ".dayDiff("Sun","Wed"); //returns 3
echo "Sat -> Wed : ".dayDiff("Sat","Wed"); //returns 4

示例此处 - https://3v4l.org/cryjd

如果您没有情感上依附在数组上,则使用strttime和日期有效。
它在下一个可能的开始日(星期日)创建了一个起点,并使用它来获得下一个结束的Unix(星期三)。

然后我只是从末端减去开始,而两天之间有多少秒钟,将其除以86400,我们之间有几天的数量。

$startday ="Sunday";
$endday = "Wednesday";
$start = strtotime("next $startday");
$end = strtotime(date("Y-m-d", $start) . " Next $endday");
Echo ($end-$start)/86400;

https://3v4l.org/vyjlm

function format($a, $b)
{
    if (strtotime($a) > strtotime($b)) list($a, $b) = [$b, $a];
    $start = strtotime($a);
    $stop = strtotime($b);
    $extend = ($stop - $start) / 86400;
    $result['extends'] = $extend;
    if ($extend < 7) {
        $result['daily'] = $extend;
    } elseif ($extend <= 31) {
        if ($stop == strtotime($a . '+1 month')) {
            $result['monthly'] = 1;
        } else {
            $w = floor($extend / 7);
            $d = ($stop - strtotime($a . '+' . $w . ' week')) / 86400;
            $result['weekly'] = $w;
            $result['daily'] = $d;
        }
    } else {
        $y = floor($extend / 365);
        if ($y >= 1) {
            $start = strtotime($a . '+' . $y . 'year');
            $a = date('Y-m-d', $start);
            if ($start > $stop) {
                $a = date('Y-m-d', strtotime($a . '-1 month'));
                $m = 11;
                $y--;
            }
            $extend = ($stop - strtotime($a)) / 86400;
        }
        if (isset($m)) {
            $w = floor($extend / 7);
            $d = $extend - $w * 7;
        } else {
            $m = isset($m) ? $m : round($extend / 30);
            $stop >= strtotime($a . '+' . $m . 'month') ? $m : $m--;
            if ($stop >= strtotime($a . '+' . $m . 'month')) {
                $d = $w = ($stop - strtotime($a . '+' . $m . 'month')) / 86400;
                $w = floor($w / 7);
                $d = $d - $w * 7;
            }
        }
        $result['yearly'] = $y;
        $result['monthly'] = $m;
        $result['weekly'] = $w;
        $result['daily'] = isset($d) ? $d : NULL;
    }
    return array_filter($result);
}

最新更新