1640995200, 'expected' => date('Y-m-d H:i:s', 1640995200)], // Carbon实例 ['input' => Carbon::parse('2023-06-15 14:30:45'), 'expected' => '2023-06-15 14:30:45'], // DateTime对象 ['input' => new \DateTime('2023-12-25 23:59:59'), 'expected' => '2023-12-25 23:59:59'], // 字符串格式 ['input' => '2023-07-20 10:15:30', 'expected' => '2023-07-20 10:15:30'], // 空值 ['input' => null, 'expected' => '-'], ['input' => '', 'expected' => '-'], // 零值 (考虑时区) ['input' => 0, 'expected' => date('Y-m-d H:i:s', 0)], ]; foreach ($testCases as $case) { $result = $this->simulateColumnDateTimeDisplay($case['input']); $inputStr = is_object($case['input']) ? get_class($case['input']) : var_export($case['input'], true); $this->assertEquals($case['expected'], $result, "输入 {$inputStr} 应该输出 {$case['expected']},实际输出 {$result}"); } } /** * 模拟columnDateTime的display回调函数 */ private function simulateColumnDateTimeDisplay($value) { // 这里复制columnDateTime方法中display回调的逻辑 // 检查空值(但不包括0,因为0是有效的时间戳) if (is_null($value) || $value === '') { return '-'; } // 如果是时间戳,转换为日期时间字符串 if (is_numeric($value)) { return date('Y-m-d H:i:s', $value); } // 如果是Carbon实例或DateTime对象 if ($value instanceof \Carbon\Carbon || $value instanceof \DateTime) { return $value->format('Y-m-d H:i:s'); } // 如果是字符串,尝试转换为标准格式 if (is_string($value)) { try { $date = new \DateTime($value); return $date->format('Y-m-d H:i:s'); } catch (\Exception $e) { return $value; // 如果转换失败,返回原值 } } return $value; } }