GridHelperDateTimeTest.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. namespace Tests\Unit\UCore;
  3. use Tests\TestCase;
  4. use Carbon\Carbon;
  5. class GridHelperDateTimeTest extends TestCase
  6. {
  7. /**
  8. * 测试columnDateTime方法的时间格式化功能
  9. */
  10. public function testColumnDateTimeFormatting()
  11. {
  12. // 测试数据
  13. $testCases = [
  14. // 时间戳 (考虑时区,使用实际的时间戳转换结果)
  15. ['input' => 1640995200, 'expected' => date('Y-m-d H:i:s', 1640995200)],
  16. // Carbon实例
  17. ['input' => Carbon::parse('2023-06-15 14:30:45'), 'expected' => '2023-06-15 14:30:45'],
  18. // DateTime对象
  19. ['input' => new \DateTime('2023-12-25 23:59:59'), 'expected' => '2023-12-25 23:59:59'],
  20. // 字符串格式
  21. ['input' => '2023-07-20 10:15:30', 'expected' => '2023-07-20 10:15:30'],
  22. // 空值
  23. ['input' => null, 'expected' => '-'],
  24. ['input' => '', 'expected' => '-'],
  25. // 零值 (考虑时区)
  26. ['input' => 0, 'expected' => date('Y-m-d H:i:s', 0)],
  27. ];
  28. foreach ($testCases as $case) {
  29. $result = $this->simulateColumnDateTimeDisplay($case['input']);
  30. $inputStr = is_object($case['input']) ? get_class($case['input']) : var_export($case['input'], true);
  31. $this->assertEquals($case['expected'], $result,
  32. "输入 {$inputStr} 应该输出 {$case['expected']},实际输出 {$result}");
  33. }
  34. }
  35. /**
  36. * 模拟columnDateTime的display回调函数
  37. */
  38. private function simulateColumnDateTimeDisplay($value)
  39. {
  40. // 这里复制columnDateTime方法中display回调的逻辑
  41. // 检查空值(但不包括0,因为0是有效的时间戳)
  42. if (is_null($value) || $value === '') {
  43. return '-';
  44. }
  45. // 如果是时间戳,转换为日期时间字符串
  46. if (is_numeric($value)) {
  47. return date('Y-m-d H:i:s', $value);
  48. }
  49. // 如果是Carbon实例或DateTime对象
  50. if ($value instanceof \Carbon\Carbon || $value instanceof \DateTime) {
  51. return $value->format('Y-m-d H:i:s');
  52. }
  53. // 如果是字符串,尝试转换为标准格式
  54. if (is_string($value)) {
  55. try {
  56. $date = new \DateTime($value);
  57. return $date->format('Y-m-d H:i:s');
  58. } catch (\Exception $e) {
  59. return $value; // 如果转换失败,返回原值
  60. }
  61. }
  62. return $value;
  63. }
  64. }