如何在php

时间:2017-12-22 19:52:43

标签: php

如何计算如何计算两天之间天数的方法?

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

制作一个数组并检查周一和周四的值的差异。这是1 - 4 = -3。忽略减号,我们得到3。所以,如果我们在当前日期添加3,那么显然我们得到了星期四的日期。如果我遇到需要计算SundayWednesday之间天数的情况,我能够工作的是什么。通过应用上述技术,我们得到7 - 3 = 4如果我们将4天添加到当前日期,那么我们绝对不会得到Wednesday。有人可以帮我解决这个问题吗?不确定是否需要应用链表或什么。需要帮助。

3 个答案:

答案 0 :(得分:1)

如果第一天大于第二天的值,则需要偏移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

答案 1 :(得分:0)

如果您对阵列没有情感依赖,则此方法使用strtotime和日期工作 它在下一个可能的开始日(星期日)创建一个起始点,并使用它来获取下一个结束日(星期三)的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

答案 2 :(得分:-2)

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);
}