You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 17:37:34