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