将日期编码为时间戳的标准是什么?
What is the standard for encoding a date as a timestamp?
是否有将日期编码为时间戳的标准?我的想法:
这应该是当地时间 12:00pm UTC,例如 9:00am 在 T-3,因此任何人都使用时间戳,无论它们的 -12/+12 偏移量将识别相同的日期,无论它们是否在 UTC 时区解析
可能是 12:00pm
可能是 UTC一天的开始(凌晨 12:00)
可能是当地时间一天的开始(世界标准时间上午 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
对象不是一个只有日期的值,而是一个时间戳,就像一个时刻。
是否有将日期编码为时间戳的标准?我的想法:
这应该是当地时间 12:00pm UTC,例如 9:00am 在 T-3,因此任何人都使用时间戳,无论它们的 -12/+12 偏移量将识别相同的日期,无论它们是否在 UTC 时区解析
可能是 12:00pm
可能是 UTC一天的开始(凌晨 12:00)
可能是当地时间一天的开始(世界标准时间上午 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
对象不是一个只有日期的值,而是一个时间戳,就像一个时刻。