| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- <?php
- namespace Tests\Unit\UCore;
- use Tests\TestCase;
- use Carbon\Carbon;
- class GridHelperDateTimeTest extends TestCase
- {
- /**
- * 测试columnDateTime方法的时间格式化功能
- */
- public function testColumnDateTimeFormatting()
- {
- // 测试数据
- $testCases = [
- // 时间戳 (考虑时区,使用实际的时间戳转换结果)
- ['input' => 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;
- }
- }
|