php - 如何获得给定月份的小时数?

时间:2015-07-28 21:38:18

标签: php

我发现我可以使用

获得天数
  

cal_days_in_month()

所以我可以使用cal_days_in_month() * 24来获得小时数。

但有没有直接的功能来获得给定月份的小时数?

2 个答案:

答案 0 :(得分:2)

此功能可以帮助您实现您正在寻找的目标:

function cal_hours_in_month($month = false, $year = false) {
    if($year === false) $year = date('Y');
    if($month === false) $month = date('n');
    $first = mktime(0, 0, 0, $month, 1, $year);
    $last = mktime(23, 59, 00, $month+1, 0, $year);

    return ($last - $first) / 3600;
}
echo cal_hours_in_month(2015, 7);

借用this answer提供的代码以获取权宜之计。

这可以带来补偿夏令时的额外好处,但您可能需要确保date_default_timezone_set()正确无误。

微不足道的兴趣点:请记住,由于偶尔会对夏令时进行调整,因此将来某个时间的持续时间可能最终会导致不准确。

我的环境(美国/芝加哥地区)本月(2015年7月)返回743.983(四舍五入)。

echo cal_hours_in_month(2, 2015);返回671.983(非闰年)

echo cal_hours_in_month(2, 2016);返回695.983(闰年)

编辑:使所有参数可选。

答案 1 :(得分:0)

Here's an approach that respects DST and the timezone.

$timezone = new DateTimezone('Europe/Berlin');
$begin = new DateTime('2015-03-01 00:00:00', $timezone);
$end = new DateTime('2015-03-31 23:59:59', $timezone);
$interval = new DateInterval('PT1H');
$period = new DatePeriod($begin, $interval, $end);

$count = 0;

foreach ($period as $date)
    ++$count;

echo $count; // 743 for March in Germany

Unfortunately, DatePeriod implements only Traversable, without support for count(), so we have to iterate over the dates and count them. (If anyone has got a better idea, let's hear it.)