我正在使用一个看起来像这样的日期
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();
答案 0 :(得分:4)
我将使用Moment.js,它是一个不错的日期解析和格式化库。要获得您想要的东西,可以使用如下语句:
console.log(moment
.parseZone(
"Mon Feb 04 2019 15:57:02 GMT-0700 (Mountain Standard Time)",
"ddd MMM DD YYYY HH:mm:ss 'GMT'ZZ") // the format of the string presented
.local()
.format('YYYY-MM-DDTHH:mm:ss')); // the format of the output
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
我将单行分成几部分,以便于阅读。一些注意事项:
format
主题列出了所使用的格式标记。
Parse > String + Format主题列出了解析标记(在大多数情况下与格式标记相同)。
请注意,输出末尾没有“ Z”;这很重要,因为没有“ Z”,它是一个本地日期。使用“ Z”实际上是在指定一个比您指定的日期和时间早7个小时的日期和时间。
答案 1 :(得分:0)
我不确定如何将其作为单线获得,但这是一种方法:
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"
答案 2 :(得分:0)
您的代码未在输入日期中加上小时。发生的情况是您的日期字符串使用特定的时区GMT-0700 (Mountain Standard Time)
,而new Date().toISOString()
中使用的时区是UTC GMT+0000 (UTC)
。因此,当在Mountain Standard Time
时区中是Mon Feb 04 2019 15:57:02
时,在UTC
时区中实际上是2019-02-05T22:57:02.000Z
。从GMT-0700
到GMT+0000
有七个小时。
已编辑
如果您不太在意时区,并希望从2019年2月4日星期一15:57:02 GMT-0700(Mountain Standard Time)获得2019-02-04T15:57:02.000Z,则可以剥离所有内容GMT之后让new Date()认为它是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