代码之家  ›  专栏  ›  技术社区  ›  Devmix

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

  •  0
  • Devmix  · 技术社区  · 6 年前

    我在和一个像这样的约会:

    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 回复  |  直到 6 年前
        1
  •  4
  •   Heretic Monkey goproxy.dev    6 年前

    我会用 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 设置日期格式。

    这个 格式 主题具有所使用的格式标记列表。 这个 Parse > String + Format 主题列出了解析标记(大部分与格式化标记相同)。

    请注意,输出末尾没有“Z”;这很重要,因为如果没有“Z”,它是本地日期。在“z”中,您实际上指定的日期和时间比给定的日期和时间早7小时。

        2
  •  0
  •   Zack    6 年前

    我不确定如何将其作为一条直线,但这是一种方法:

    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"
    
        3
  •  0
  •   Jonathan Badillo    6 年前

    您的代码没有向输入日期添加小时。发生的是,您的日期字符串正在使用特定的时区 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日周一到2019年2月4日15:57:02 GMT-0700(山地标准时间)获得2019-02-04T15:57:02.000Z,你可以在格林尼治时间之后去掉所有东西,让新日期()认为它是一个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