Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/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 如何仅更改时区而不修改momentz中的时间_Javascript_Momentjs_Datetime Format - Fatal编程技术网

Javascript 如何仅更改时区而不修改momentz中的时间

Javascript 如何仅更改时区而不修改momentz中的时间,javascript,momentjs,datetime-format,Javascript,Momentjs,Datetime Format,我有2016-06-21T10:00:00-07:00格式的日期和时间,在PST中代表2016年6月21日下午5点,我只想在EST中将其更改为2016年6月21日下午5点,反之亦然。我怎样才能用momentz做到这一点 编辑: 给定输入=2016-06-21T08:00:00-07:00(太平洋标准时间) 预计产量=2016-06-21T08:00:00-04:00(美国东部标准时间) 因此,当我将其转换为UTC时,它应该 2016-06-22T15:00:00Z用于PST 2016-06-2

我有2016-06-21T10:00:00-07:00格式的日期和时间,在PST中代表2016年6月21日下午5点,我只想在EST中将其更改为2016年6月21日下午5点,反之亦然。我怎样才能用momentz做到这一点

编辑:

给定输入=2016-06-21T08:00:00-07:00(太平洋标准时间)

预计产量=2016-06-21T08:00:00-04:00(美国东部标准时间)

因此,当我将其转换为UTC时,它应该

2016-06-22T15:00:00Z用于PST 2016-06-22T12:00:00Z对于ESTCheckout
moment()。utcOffset()
您可以将偏移量作为参数传递给此函数,并且日期将使用该区域设置

假设您事先知道所需的UTCOFFSET,在您的情况下为-420和-240或-300(带DaylightSave的EST)。下面是可以做的

var dateTime = moment('2016-06-21T10:00:00-07:00');
dateTime.utcOffset(-420).format();
"2016-06-21T10:00:00-07:00"
dateTime.utcOffset(-240).format()
"2016-06-21T13:00:00-04:00"
注意:
如果是-04:00,则应该是13:00:00,而不是07:00:00
-

编辑:这个答案被发布到问题的早期版本,在不同的时区需要相同的时间。如果不正确,请详细说明。
谢谢

我认为您对ISO8601格式的工作原理感到困惑。此格式始终表示带有时区偏移的本地时间。因此,
2016-06-21T10:00:00-07:00
表示2016年6月21日上午10点,时区当前为UTC-7(这可能是美国太平洋地区,以及其他许多地区)

听起来你想用当地时间,但把它放在一个新的时区。这就引出了一些有趣的问题,关于你为什么要以你现在的格式接收日期。如果要将日期解释为全局时间轴上的精确点,则您接收该日期的格式是好的。但是,如果将日期解释为本地时间(与UTC无关),则可能需要考虑在源位置更改日期格式的可能性。例如,如果您向一个API发出ajax请求,并且它以这种格式返回一个日期,但该日期实际上与UTC没有关系,那么最好尝试将该API更改为只发送本地时间(不带偏移量)。如果您能够做到这一点,那么以下代码将起作用:

moment.tz('2016-06-21T10:00:00', 'America/New_York').format()
"2016-06-21T10:00:00-04:00"
如果您无法做到这一点,或者如果日期被解释为全球时间线上的一个精确点,但您希望在您的特定用例中忽略这一点,则可以做到这一点。您需要指定忽略初始时间戳上时区偏移的解析格式。守则如下:

moment.tz('2016-06-21T10:00:00-07:00', 'YYYY-MM-DDTHH:mm:ss', 'America/New_York').format()
"2016-06-21T10:00:00-04:00"

您可能会从中的材料中受益,因为它涵盖了ISO8601格式如何工作,以及所有矩的构造函数如何工作。

我用预期的输入和输出编辑了我的问题。从未使用特殊情况的时区转换。由于各国政府经常更改时区规则,因此无法保证今天有效的代码明天也会有效。使用时区库为您处理此问题。更多关于时区变化频率的信息:我仍然得到了不想要的结果@Maggie Pint,我已经在使用momentz fir了。我只是改变了我在各自时区中对日期的错误表示。我最初的期望仍然是一样的。无论如何,我感谢您的帮助。我不能删除偏移量,但我也有UTC格式的相同时间。所以,我总共有三个输入,一个是带有偏移量的dateTime,以及UTC和目标时区中的dateTime。
moment.tz('2016-06-21T10:00:00-07:00', 'YYYY-MM-DDTHH:mm:ss', 'America/New_York').format()
"2016-06-21T10:00:00-04:00"