制作用于计算特定日期的PHP函数

3

我有一个计算一年中有多少天的函数,我通过改变$week变量的值让它可以从周一到周六工作:

星期一 - 6:星期六,但是当我把7:星期日放进去时它就无法工作。

有人能帮忙吗?我是否遗漏了某些逻辑?

$year = 2016;
$newyear = $year;
$week = 0;
$day = 0;
$mo = 1;
$days = array();
$i = 1;

        while ($week != 7) { // here is where I change the 1-7 for days
          $day++;
          $week = date("w", mktime(0, 0, 0, $mo,$day, $year));
        }

        array_push($days,date("r", mktime(0, 0, 0, $mo,$day, $year)));
        while ($newyear == $year) {
          $x =  strtotime(date("r", mktime(0, 0, 0, $mo,$day, $year)) . "+" . $i . " week");
          $i++;
          if ($year == date("Y",$x)) {
            array_push($days,date("r", $x));
          }
          $newyear = date("Y",$x);
        }

        print count($days);

感谢您的帮助,是否可以立即计算出总天数为2年的例子:

我有一个日期是2016年1月11日星期一,我想知道从2016年1月11日到2018年1月11日有多少天,有多少个星期一。

谢谢!


1
星期从0(星期日)到6(星期六),请参阅手册 - kamal pal
1
在php或其他任何语言中,与时间打交道是一个大问题。我建议尝试使用Carbon,它专门为这些事情而设计。 - Andrei
由于您是StackOverflow的新用户:请确保接受解决您问题的答案,谢谢。 - Clay
2个回答

3
使用 DateTime/DateInterval 函数:
$datetime1 = new DateTime('2018-01-11');
$datetime2 = new DateTime('2016-01-11');
$interval = $datetime1->diff($datetime2);
echo floor($interval->format('%a days')/7); // 104

或者使用strtotime...

你也可以这样做:

$startDate = strtotime('2016-01-11');
$endDate = strtotime('2018-01-11');
$totalWeeks = (($endDate - $startDate)/86400)/7;
echo floor($totalWeeks); // rounds to 104

点击此处阅读更多:

DateDiff - http://php.net/manual/en/datetime.diff.php

DateInterval::format - http://php.net/manual/en/dateinterval.format.php

更新...如何轻松地进行日期计算的“调试”:

<?php

$startDate = strtotime('2016-01-11');
$endDate = strtotime('2018-01-11');
$currentDate = $startDate;

$count = 0;
while ($currentDate <= $endDate) {
    echo date('r', $currentDate) . "\n";
    $currentDate = strtotime('+1 week', $currentDate);
    if ($currentDate<=$endDate) {
        $count++;
    }
}

echo $count . "\n";

你是想要计算两个星期一之间的天数吗?还是想要包括第一个星期一和最后一个星期一? - Clay
嗨,克莱顿!是的,它可以在星期天工作,但如果我想了解星期一或星期二呢?有没有可以更改值的选项,比如将其更改为1,然后它会告诉我有多少个星期一,或者更改为2,然后它会告诉我星期二有多少个?谢谢! - Boby
我正在尝试构建一个小函数,这样当我输入日期时,比如说日期是星期一,就能计算出在两年内有多少个星期一,如果日期是星期五,就能计算出在两年内有多少个星期五,类似这样的功能。 - Boby
你可以更改我发布的内容以使用不同的日期,然后根据该日期获取数字。 - Clay
总结一下,这意味着如果我使用2016年1月8日这个星期五的日期,它将通过您的函数输出2年时间内有多少个星期五?如果有人输入2016年1月15日,则找出2年时间内有多少个星期五 :) - Boby
显示剩余5条评论

2
$date_1 =  strtotime("2016-01-11");
$date_2 = strtotime("2018-01-11");
$datediff = $date_2 - $date_1;
echo floor($datediff/(60*60*24));

修改后:

您可以在两个日期之间找到任何一周的日子。只需更改$days[0]的值即可。

对于星期一:

<?php
$date_1 = $from = strtotime('2016-01-11');
$date_2 = strtotime('2018-01-11');
$days = array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday');
$count = 0;
while ($date_1 < $date_2) {
  if(date('l', $date_1) == $days[0]);
  {
    $count++;   
  }
  $date_1 += 7 * 24 * 3600;
}
echo "From : ".date('Y-m-d',$from)."  To : ".date('Y-m-d',$date_2)."  has $count  $days[0]";
?>

输出:

From : 2016-01-11 To : 2018-01-11 has 105 Monday

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接