野生程序员还真不知道不能传后端真正的Date类型

59 阅读1分钟

那些平台能传Date类型过去?

实际上,没有任何平台能直接传递Date类型到服务端,这是由JSON标准本身决定的:

JSON标准的限制

JSON规范只支持以下数据类型:

  • 字符串 (string)
  • 数字 (number)
  • 布尔值 (boolean)
  • null
  • 对象 (object)
  • 数组 (array)

JSON中没有原生的Date类型!

各平台的实际做法

1. JavaScript/Web

// 看起来像传Date,实际上:
JSON.stringify(new Date()) // "2023-12-07T10:30:00.000Z" (字符串)
JSON.stringify({date: Date.now()}) // {"date": 1701944200000} (时间戳数字)

2. iOS (Swift)

// 使用JSONEncoder时
encoder.dateEncodingStrategy = .iso8601 // 转为ISO字符串
encoder.dateEncodingStrategy = .millisecondsSince1970 // 转为时间戳数字

3. Android/Java

// Gson, Jackson等都是转换为字符串或数字
gson.toJson(new Date()) // "Dec 7, 2023 10:30:00 AM" 或时间戳

4. C# (.NET)

// System.Text.Json
JsonSerializer.Serialize(DateTime.Now) // "2023-12-07T10:30:00.000Z"

服务端的"Date类型"

当服务端说接收"Date类型"时,通常指:

  1. ISO 8601字符串: "2023-12-07T10:30:00.000Z"
  2. 时间戳数字: 1701944200000 (毫秒)
  3. 特定格式字符串: "2023-12-07 10:30:00"

所以你的困惑是完全正常的,这是一个普遍的误解!所有平台最终都是传字符串或数字,没有例外。