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

时间:2019-02-08 00:18:35

标签: 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();

3 个答案:

答案 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>

我将单行分成几部分,以便于阅读。一些注意事项:

  • parseZone允许您从字符串中解析“ -0700”。
  • local将日期从解析的时区转换为当前时区
  • format格式化日期。

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-0700GMT+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