Geo*_*kos 2 javascript timezone date
我的场景是使用浏览器时区(仅使用new Date())创建的 Date 对象并将其发送到服务器,但我想将此日期与另一个特定时区一起发送,让我们假设它是欧洲/雅典。
实际日期字符串的最佳表示是什么,以便我可以将其转换回实际欧洲/雅典日期后端的日期对象?
我有时区信息,但不知道如何获取Fri Feb 05 2021 05:30:00 GMT-0500 (Eastern Standard Time)并将其转换为欧洲/雅典日期。
我尝试过使用 date-fns 但没有走得太远。
您有一些不同的问题和误解,因此我将尝试解决每个问题,从标题中的问题开始:
如何转换特定时区的日期并发送到服务器
如果您指的是像 之类的日期2021-01-18,则它不能位于特定时区。根据定义,它只是一个日期。想象一下您可能挂在墙上的印刷日历,其中每个日期都有一个正方形。没有与此类日历关联的时区。人们可以问“特定时区现在是哪一天”,但答案本身没有时区。
如果您指的是 JavaScriptDate对象,那么答案又是“您不能”。该Date对象实际上不是日期,也没有时区,而是时间戳。在内部,Date对象仅保存一个值 - 自 1970-01-01 00:00:00.000 UTC 以来经过的毫秒数(不考虑闰秒)。它没有时区。相反,某些功能(例如).toString()将在运行时应用系统本地时区。该时区来自操作系统(在大多数情况下)。它不存储在Date对象本身内部。
我的场景是使用浏览器时区创建的 Date 对象(仅使用
new Date())...
这将使用浏览器运行所在的系统时钟,但时区不相关。该Date对象将根据表示“现在”的 Unix 时间戳构建。此类时间戳本质上是基于 UTC 的。浏览器直接从操作系统获取UTC时间,不考虑时区。
...并发送到服务器
如果不经过一侧的反序列化和另一侧的序列化,就无法将对象发送到服务器。
...但我想将此日期与另一个特定时区一起发送,让我们假设它是欧洲/雅典。
实际日期字符串的最佳表示是什么,以便我可以将其转换回实际欧洲/雅典日期后端的日期对象?
由于该对象仅代表“现在”,因此您不需要以时区特定格式发送它。只需发送 UTC 时间即可。理想的格式是 ISO 8601,可以直接使用对象.toISOString()的函数获取Date。
根据您的使用案例,您还可以考虑是否可以只从服务器获取 UTC 时间。至少你对时钟有一定的控制权。
在服务器端,如果您需要特定时区的时间,请在服务器上而不是在客户端上从 UTC 转换为该时区。
另外,来自评论:
我相信即使 EPOCH 在不同时区之间也是不同的。我可以获取 EPOCh,然后尝试转换为特定时区。
这在某些层面上是不正确的。首先,要明白epoch只是一个英文单词,本质上是“起点的表示”。它不是一种格式,也不是缩写词。在 JavaScript 中,Date对象使用 Unix 时间戳,它使用纪元1970-01-01T00:00:00.000Z. 换句话说,UTC 1970 年 1 月 1 日午夜是0时间戳。有时,此类时间戳被称为“纪元时间”。我认为这是用词不当,但即便如此 - 它们始终基于 UTC。没有时区,因此全世界都是一样的。
| 归档时间: |
|
| 查看次数: |
1198 次 |
| 最近记录: |