Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何转换特定时区中的日期并发送到服务器_Javascript_Date_Timezone - Fatal编程技术网

Javascript 如何转换特定时区中的日期并发送到服务器

Javascript 如何转换特定时区中的日期并发送到服务器,javascript,date,timezone,Javascript,Date,Timezone,我的场景是一个使用浏览器时区创建的日期对象(仅使用new Date())并发送到服务器,但我想将此日期与另一个特定时区一起发送——假设是欧洲/雅典 什么是实际日期字符串的最佳表示形式,以便我可以将其转换回实际欧洲/雅典日期中后端的日期对象 我有时区信息,但不知道如何获取周五2021年2月5日05:30:00 GMT-0500(东部标准时间)并将其转换为欧洲/雅典日期 我尝试使用date fns,但没有成功。尝试使用来定位: let date = (new Date()).toLocaleStri

我的场景是一个使用浏览器时区创建的日期对象(仅使用
new Date()
)并发送到服务器,但我想将此日期与另一个特定时区一起发送——假设是欧洲/雅典

什么是实际日期字符串的最佳表示形式,以便我可以将其转换回实际欧洲/雅典日期中后端的日期对象

我有时区信息,但不知道如何获取
周五2021年2月5日05:30:00 GMT-0500(东部标准时间)
并将其转换为欧洲/雅典日期


我尝试使用date fns,但没有成功。

尝试使用
来定位:

let date = (new Date()).toLocaleString("en-US", {timeZone: "Europe/Athens"});

尝试使用
来定位提示

let date = (new Date()).toLocaleString("en-US", {timeZone: "Europe/Athens"});

您有一些不同的问题和误解,因此我将尝试解决每一个问题,从标题中的问题开始:

如何转换特定时区中的日期并发送到服务器

  • 如果您指的是像2021-01-18这样的日期,则该日期不能位于特定时区。根据定义,这只是一个日期。想想你可能挂在墙上的打印日历,每个日期都有一个正方形。没有与此类日历关联的时区。人们可以问“某个特定时区现在是几号”,但答案本身没有时区

  • 如果您指的是JavaScript
    Date
    对象,那么答案还是“您不能”。
    Date
    对象实际上不是日期,也没有时区,而是时间戳。在内部,
    Date
    对象只保存一个值—自1970-01-01 00:00:00.000 UTC以来经过的毫秒数(不考虑闰秒)。它没有时区。相反,一些函数,如
    .toString()
    在运行时将应用系统本地时区。该时区来自操作系统(在大多数情况下)。它不存储在
    日期
    对象本身中

我的场景是使用浏览器时区创建的日期对象(仅使用
newdate()

这将使用浏览器运行时的系统时钟,但时区不相关。
Date
对象将根据表示“现在”的Unix时间戳构造。此类时间戳本质上是基于UTC的。浏览器直接从操作系统获取UTC时间,而不考虑时区

。。。并发送到服务器

如果一方不进行反序列化,另一方不进行序列化,则无法将对象发送到服务器

。。。但是我想把这个日期和另一个特定的时区一起发送,假设是欧洲/雅典

什么是实际日期字符串的最佳表示形式,以便我可以将其转换回实际欧洲/雅典日期中后端的日期对象

因为对象只表示“现在”,所以不需要以特定于时区的格式发送它。只需发送UTC时间。理想的格式是ISO 8601,可以使用
.toISOString()
函数直接从
日期
对象获得

根据您的使用情况,您也可以考虑是否可以从服务器中获取UTC时间。至少你可以控制时间

在服务器端,如果需要特定时区的时间,则在服务器上(而不是在客户端)将UTC转换为该时区

此外,根据评论:


我相信即使是时代在不同的时区之间也是不同的。我只需要得到历元,然后尝试转换到特定的时区


这在一些层面上是不正确的。首先,要理解epoch只是一个英语单词,本质上意味着“一个起点的代表”。它不是一种格式,也不是首字母缩略词。在JavaScript中,
Date
对象使用Unix时间戳,它使用
1970-01-01T00:00:00.000Z的历元。换句话说,1970年1月1日午夜UTC是
0
时间戳。有时,这种时间戳被称为“历元时间”。在我看来,这是一个用词不当的说法,但即使如此——它们始终基于UTC。没有时区,因此它们对整个世界来说都是一样的。

您有一些不同的问题和误解,因此我将尝试解决每一个问题,从标题中的问题开始:

如何转换特定时区中的日期并发送到服务器

  • 如果您指的是像2021-01-18这样的日期,则该日期不能位于特定时区。根据定义,这只是一个日期。想想你可能挂在墙上的打印日历,每个日期都有一个正方形。没有与此类日历关联的时区。人们可以问“某个特定时区现在是几号”,但答案本身没有时区

  • 如果您指的是JavaScript
    Date
    对象,那么答案还是“您不能”。
    Date
    对象实际上不是日期,也没有时区,而是时间戳。在内部,
    Date
    对象只保存一个值—自1970-01-01 00:00:00.000 UTC以来经过的毫秒数(不考虑闰秒)。它没有时区。相反,一些函数,如
    .toString()
    在运行时将应用系统本地时区。该时区来自操作系统(在大多数情况下)。它不存储在
    日期
    对象本身中

我的场景是使用浏览器时区创建的日期对象(仅使用
newdate()

这将使用浏览器运行时的系统时钟,但时区不相关。
Date
对象将根据表示“现在”的Unix时间戳构造。此类时间戳本质上是基于UTC的。浏览器直接从中获取UTC时间