关于MongoDB\BSON\UTCDateTime反射获取milliseconds属性异常的问询
问题原因解释
这种矛盾的核心在于MongoDB\BSON\UTCDateTime是PHP扩展(C语言编写)实现的类,而非纯PHP代码类:
- 反射机制会枚举扩展类内部维护的所有属性(包括仅在C层面可见的内部属性),所以你能在反射结果里看到
milliseconds属性。 - 但这些内部属性并没有暴露给PHP用户空间,扩展类通过C代码严格控制了属性的可访问性,不允许直接用
->语法读取,因此直接访问会触发“Undefined property”警告。
正确获取时间数据的方式
不要尝试直接访问内部属性,而是使用类提供的公共API:
- 获取毫秒级时间戳:调用
$utcDateTime->getTimestamp()方法,返回存储的毫秒数 - 转换为PHP原生
DateTime对象:调用$utcDateTime->toDateTime()方法,方便进行常规日期时间操作
示例代码:
$utcDate = new MongoDB\BSON\UTCDateTime(); // 获取毫秒时间戳 $milliseconds = $utcDate->getTimestamp(); echo $milliseconds . PHP_EOL; // 转换为DateTime对象 $dateTime = $utcDate->toDateTime(); echo $dateTime->format('Y-m-d H:i:s') . PHP_EOL;
内容的提问来源于stack exchange,提问作者Josef Sábl
相关产品推荐
相关产品推荐

