我正在尝试为我的网站制作一些统计数据。
但是我遇到的问题是,如果我使用我现在获得的代码,当它像今天这样的时候,那么这个月的第一天,我收到错误division by zero
。
我的代码:
$begin = date('Y-m-01');
$end = date('Y-m-t');
$begin = new \DateTime($begin);
$end = new \DateTime('now');
$diff = $end->diff($begin); // creates a DateInterval object
$days = (int)$diff->format('%a'); // %a --> days
$average_visits = $get_visits / $days;
当日期不是01或1时,它确实有效。
我如何解决他的问题?
答案 0 :(得分:1)
这是因为$days
实际上是zero
!
今天是2015-07-01
(至少在我的时区)
您定义的$begin = date('Y-m-01');
是2015-07-01
您定义的$end = new \DateTime('now');
是2015-07-01
您想知道天数的差异0
$diff = $end->diff($begin);
$days = (int)$diff->format('%a');
您将未知号码$get_visits
除以$days
(即零)。
因此,您得到了正确的错误division by zero
。
如果您的意思是$days
完全包含开始日期和结束日期,请使用
$days = (int)$diff->format('%a') + 1;
然后
a) begin = 2015-07-01, end = 2015-07-01
b) begin = 2015-07-01, end = 2015-07-05
a)表示这是1
天
b)表示这些日期为5
天(2015-07-01日,2015-07-02日,2015-07-03日,2015-07-04日和2015-07-05日为5天)