Javascript 如何将时间转换为特定字符串?

Javascript 如何将时间转换为特定字符串?,javascript,angular,typescript,lodash,Javascript,Angular,Typescript,Lodash,我正在和这样一个约会: Mon Feb 04 2019 15:57:02 GMT-0700 (Mountain Standard Time) 我试着把它转换成这样: 2019-02-04T15:57:02.000Z 但出于某种原因,我的代码总是添加7小时,结果如下: “2019-02-05T22:57:02.000Z” 谁能告诉我我做错了什么?提前多谢 这是我的密码: new Date(myTime as string).toISOString(); 我会使用,这是一个不错的日期解析和格式

我正在和这样一个约会:

Mon Feb 04 2019 15:57:02 GMT-0700 (Mountain Standard Time)
我试着把它转换成这样:

2019-02-04T15:57:02.000Z
但出于某种原因,我的代码总是添加7小时,结果如下:

“2019-02-05T22:57:02.000Z”

谁能告诉我我做错了什么?提前多谢

这是我的密码:

new Date(myTime as string).toISOString();
我会使用,这是一个不错的日期解析和格式库。要得到您想要的,您可以使用以下语句:

console.log(瞬间)
.parseZone(
“2019年2月4日星期一15:57:02 GMT-0700(山区标准时间)”,
“ddd MMM DD YYYY HH:mm:ss'GMT'ZZ”)//显示的字符串格式
.local()
.format('YYYY-MM-DDTHH:MM:ss');//输出的格式
我会使用,这是一个不错的日期解析和格式库。要得到您想要的,您可以使用以下语句:

console.log(瞬间)
.parseZone(
“2019年2月4日星期一15:57:02 GMT-0700(山区标准时间)”,
“ddd MMM DD YYYY HH:mm:ss'GMT'ZZ”)//显示的字符串格式
.local()
.format('YYYY-MM-DDTHH:MM:ss');//输出的格式

我不确定如何将其作为一行程序,但这是一种方法:

var time = new Date('Mon Feb 04 2019 15:57:02 GMT-0700 (Mountain Standard Time)')
new Date(time.setHours(time.getHours() + 7)).toISOString()

"2019-02-05T12:57:02.000Z"

我不确定如何将其作为一个单行程序,但这是一种方法:

var time = new Date('Mon Feb 04 2019 15:57:02 GMT-0700 (Mountain Standard Time)')
new Date(time.setHours(time.getHours() + 7)).toISOString()

"2019-02-05T12:57:02.000Z"

您的代码未向输入日期添加小时数。发生的情况是,您的日期字符串使用的是特定时区
GMT-0700(山区标准时间)
,而
new date()中使用的时区。toISOString()
是UTC
GMT+0000(UTC)
。因此,当
山区标准时间
时区为
周一2019年2月4日15:57:02
时,
UTC
时区实际上为
2019-02-05T22:57:02.000Z
。从
GMT-0700
GMT+0000
有七个小时

已编辑

如果你真的不在乎时区,想从2019年2月4日星期一15:57:02 GMT-0700(山区标准时间)获得2019-02-04T15:57:02.000Z,你可以在GMT之后去掉所有内容,让新日期()认为这是UTC日期

var timeString = 'Mon Feb 04 2019 15:57:02 GMT-0700 (Mountain Standard Time)';
new Date(timeString.substr(0, timeString.indexOf('GMT') + 3));

2019-02-04T15:57:02.000Z

您的代码未向输入日期添加小时数。发生的情况是,您的日期字符串使用的是特定时区
GMT-0700(山区标准时间)
,而
new date()中使用的时区。toISOString()
是UTC
GMT+0000(UTC)
。因此,当
山区标准时间
时区为
周一2019年2月4日15:57:02
时,
UTC
时区实际上为
2019-02-05T22:57:02.000Z
。从
GMT-0700
GMT+0000
有七个小时

已编辑

如果你真的不在乎时区,想从2019年2月4日星期一15:57:02 GMT-0700(山区标准时间)获得2019-02-04T15:57:02.000Z,你可以在GMT之后去掉所有内容,让新日期()认为这是UTC日期

var timeString = 'Mon Feb 04 2019 15:57:02 GMT-0700 (Mountain Standard Time)';
new Date(timeString.substr(0, timeString.indexOf('GMT') + 3));

2019-02-04T15:57:02.000Z

在UTC时间内,使用任何非ISO格式的字符串运行
新日期(字符串)
,会带来麻烦。您最好使用类似于的特定格式。@HereticMonkey您能提供一个例子吗?感谢你所写的,你实际上不想在结尾处出现Z。这表示UTC,在本例中,UTC比所示时区提前7小时。关于如何防止它增加7小时,有什么想法吗?“如何防止它增加7小时”-没有办法阻止它,你要求它在UTC时间格式化它-确实如此。在UTC时间,使用任何非ISO格式的字符串运行
新日期(字符串)
,他在自找麻烦。您最好使用类似于的特定格式。@HereticMonkey您能提供一个例子吗?感谢你所写的,你实际上不想在结尾处出现Z。这表示UTC,在本例中,它比所示时区提前7小时。关于如何防止它增加7小时,有什么想法吗?“如何防止它增加7小时”-没有办法阻止它,你要求它在UTC时间格式化-它做到了。最后还添加了
Z
,这可能是胡说八道,但这正是OP想要的:耸耸肩:@progx我甚至不知道该说些什么。lodash是一个用于操纵阵列和对象的库。js是一个用于解析、操作和显示日期的库。为正确的工作使用正确的工具。最后再加上
Z
,这将是胡说八道,但这正是OP想要的:耸耸肩:@progx我甚至不知道该怎么说。lodash是一个用于操纵阵列和对象的库。js是一个用于解析、操作和显示日期的库。为正确的工作使用正确的工具。