如何获取PHP DateTime对象属性并遍历含该对象的数组输出值?
问题解答
1. 获取DateTime对象的属性(如时区)
PHP的DateTime对象内部属性(比如timezone、date)是受保护的,不能直接通过->符号访问,必须使用类提供的公共方法来获取对应值:
- 获取时区:调用
getTimezone()方法,返回DateTimeZone对象;若要获取时区字符串(如America/New_York),可再调用该对象的getName()方法 - 获取格式化日期时间:使用
format()方法,传入格式字符串(比如Y-m-d H:i:s) - 获取时区类型:通过
getTimezone()返回的DateTimeZone对象调用getType()
示例代码:
$date = new DateTime('now', new DateTimeZone('America/New_York')); // 获取时区字符串 echo $date->getTimezone()->getName(); // 输出 America/New_York // 获取格式化日期 echo $date->format('Y-m-d H:i:s'); // 输出当前日期时间,如2024-05-20 10:30:00
2. 遍历含DateTime对象的数组并输出值
你的数组是关联数组,若需要同时获取键名(如new_years_day)和对应的DateTime对象,可采用foreach($holidaysThisYear as $holidayName => $holidayDate)的遍历形式。同时必须用公共方法获取对象属性,不能直接访问受保护的内部属性。
针对你的数组示例,正确遍历代码如下:
<?php foreach($holidaysThisYear as $holidayName => $holidayDate) { // 输出节假日标识名 echo "<h3>{$holidayName}</h3>"; // 输出格式化后的日期 echo "日期:" . $holidayDate->format('Y-m-d') . "<br>"; // 输出时区字符串 echo "时区:" . $holidayDate->getTimezone()->getName() . "<br>"; // 输出时区类型 echo "时区类型:" . $holidayDate->getTimezone()->getType() . "<br><br>"; } ?>
你之前的代码失效,是因为直接访问了DateTime的受保护属性$holidayThisYear->timezone,PHP不允许这类操作,必须通过官方提供的公共方法获取数据。
内容的提问来源于stack exchange,提问作者Flow
相关产品推荐
相关产品推荐

