我发现我可以使用
获得天数cal_days_in_month()
所以我可以使用cal_days_in_month() * 24
来获得小时数。
但有没有直接的功能来获得给定月份的小时数?
答案 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.)