将日期编码为时间戳的标准是什么?

What is the standard for encoding a date as a timestamp?

是否有将日期编码为时间戳的标准?我的想法:

  1. 这应该是当地时间 12:00pm UTC,例如 9:00am 在 T-3,因此任何人都使用时间戳,无论它们的 -12/+12 偏移量将识别相同的日期,无论它们是否在 UTC 时区解析

  2. 可能是 12:00pm

  3. 可能是 UTC一天的开始(凌晨 12:00)

  4. 可能是当地时间一天的开始(世界标准时间上午 12:00),例如 T-39:00pm


是否有官方规范或标准要遵守?

指向此文档并说 'this is the standard' 而不是不知道并不得不更改我们的逻辑。

这没有标准,因为日期和时间戳在逻辑上是两个截然不同的概念。

  • 日期涵盖当天的整个时间范围,而不是特定时间点。
  • 在任何给定的时间点,另一个时区的人可能是不同的日期,但日期本身与时区没有任何关联。将日期可视化为日历上的一个正方形,而不是时间轴上的一个点。
  • 许多 API 将使用午夜 (00:00) 作为将仅日期值分配给日期+时间值时的默认时间。然而:
    • 它是基于 UTC 时间还是基于本地时间在很大程度上取决于特定的 API。这个没有标准,一个答案也不一定比另一个好。
    • 指定当地时间午夜可能对于在午夜附近转换的时区有问题。例如,in Santiago, Chile on 2019-09-08,由于夏令时的开始,这一天从 01:00 开始。那天没有00:00

此外,您用 momentjs 标记了您的问题。由于 Moment 对象基本上是时间戳(不是日期),因此 Moment.js 如果提供仅日期值,通常会分配一天的开始。所涉及的时区是决定实际时间的关键,这说明了我之前的观点。

例如:

// Parsing as UTC
moment.utc('2019-09-08').format() //=> "2019-09-08T00:00:00Z"

// Parsing as Local Time (my local time zone is US Pacific Time)
moment('2019-09-08').format() //=> "2019-09-08T00:00:00-07:00"

// Parsing in a specific time zone (on a day without midnight)
moment.tz('2019-09-08', 'America/Santiago').format() //=> "2019-09-08T01:00:00-03:00"

另请记住,有时 API 可能会被错误命名。 JavaScript Date 对象不是一个只有日期的值,而是一个时间戳,就像一个时刻。