从日期字符串创建JavaScript日期对象+;时间字符串+;时区偏移字符串

从日期字符串创建JavaScript日期对象+;时间字符串+;时区偏移字符串,javascript,datetime,timestamp,momentjs,Javascript,Datetime,Timestamp,Momentjs,我总共有4种不同的输入,即: 日期字符串(2020-05-05) 时间字符串(15:30) 时区偏移(-09:00) 我想把这些字符串组合成一个datetime对象,比如(2020-05-05T15:30:00-09:00),不管我的本地浏览器时区是什么。问题是,当我组合这些字符串并尝试使用new date()函数创建date对象时,我的datetime会转换为UTC时间戳 我试过这个: const date = moment(this.actualDateOfSurgeryDate).fo

我总共有4种不同的输入,即:

  • 日期字符串(2020-05-05)
  • 时间字符串(15:30)
  • 时区偏移(-09:00)
  • 我想把这些字符串组合成一个datetime对象,比如(2020-05-05T15:30:00-09:00),不管我的本地浏览器时区是什么。问题是,当我组合这些字符串并尝试使用new date()函数创建date对象时,我的datetime会转换为UTC时间戳

    我试过这个:

    const date =
      moment(this.actualDateOfSurgeryDate).format(YYYYMMDD) +
      'T' +
      moment(this.actualDateOfSurgeryTimeDropDown + ' ' + this.actualDateOfSurgeryTimeAM_PMDropDown, ['h:mm A']).format('HH:mm:ss') +
      offsetTime;
    
    this.caseDetail.actualDateOfSurgery = new Date(date);
    
    这给了我类似于:2020-05-05T04:30:00.000Z的输出

    如何获得所需的输出:2020-05-05T15:30:00-09:00?? 由于DST,我的项目中有时刻js可用

    3月之前或10月之后的日期为15:30

    let dateString=“2020-05-05”+“T”+“15:30”+“:00”+“-09:00”
    console.log(日期字符串)
    const date=新日期(日期字符串)
    console.log(日期)
    const Anchorage=date.tolocalesting('en-US',{时区:'America/Anchorage',hour12:false})
    控制台日志(锚地)
    让选项={}
    选项。时区=‘美国/安克雷奇’;
    options.timeZoneName='short';
    log(date.toLocaleDateString('en-US')、date.toLocaleTimeString('en-US',options))由于DST,我得到16:30

    3月之前或10月之后的日期为15:30

    let dateString=“2020-05-05”+“T”+“15:30”+“:00”+“-09:00”
    console.log(日期字符串)
    const date=新日期(日期字符串)
    console.log(日期)
    const Anchorage=date.tolocalesting('en-US',{时区:'America/Anchorage',hour12:false})
    控制台日志(锚地)
    让选项={}
    选项。时区=‘美国/安克雷奇’;
    options.timeZoneName='short';
    log(date.toLocaleDateString('en-US')、date.toLocaleTimeString('en-US',options))
    我想将这些字符串组合成一个datetime对象,如(2020-05-05T15:30:00-09:00)

    日期对象非常简单,它们只是一个时间值,自1970-01-01T00:00:00Z以来以毫秒为单位的偏移量,因此本质上是UTC。内置解析器不可靠,并且缺少任何功能,例如格式化标记

    因此,如果有单独的值,如:

    • 日期字符串(2020-05-05)
    • 时间字符串(15:30)
    • 时区偏移(-09:00)
    然后,您可以创建一个符合格式的字符串,该字符串应该由内置解析器正确解析,例如

    new Date('2020-05-05T15:30:00.000-09:00')
    
    然而,由于实现的不同,一般建议避免使用内置解析器。此外,格式必须精确(例如,时间戳中包含秒和毫秒,偏移量中包含冒号(:),否则某些实现会将其视为格式错误而拒绝,并返回无效日期

    一旦有了日期对象,获取带有偏移量的“本地”时间戳就是一个格式化问题,这在以前已经被回答了很多次(例如)。没有任何像样的内置格式函数(在某些情况下可以,但通常缺乏功能),因此您必须要么使用,要么使用库

    下面的示例使用,建议作为moment.js的升级路径

    对于Luxon,如果您指定一个代表性位置,您将获得该位置在该日期日期和时间的偏移量。或者,您可以将偏移量固定为设定值,实质上是为没有代表性位置的时区设置偏移量,这样它就不会引用夏令时或历史偏移量更改:

    let DateTime=luxon.DateTime;
    //按指定位置的偏移量
    设d0=DateTime.fromISO('2020-01-01',{zone:'America/Yakutat'});
    设d1=DateTime.fromISO('2020-06-30',{zone:'America/Yakutat'});
    console.log(d0.toString());
    console.log(d1.toString());
    //每个提供的字符串的固定偏移量
    设d2=DateTime.fromISO('2020-05-05T15:30:00.000-09:00',{setZone:true});
    设d3=DateTime.fromISO('2020-01-01T15:30:00.000-09:00',{setZone:true});
    console.log(d2.toString());
    log(d3.toString());
    
    我想将这些字符串组合成一个datetime对象,如(2020-05-05T15:30:00-09:00)

    日期对象非常简单,它们只是一个时间值,自1970-01-01T00:00:00Z以来以毫秒为单位的偏移量,因此本质上是UTC。内置解析器不可靠,并且缺少任何功能,例如格式化标记

    因此,如果有单独的值,如:

    • 日期字符串(2020-05-05)
    • 时间字符串(15:30)
    • 时区偏移(-09:00)
    然后,您可以创建一个符合格式的字符串,该字符串应该由内置解析器正确解析,例如

    new Date('2020-05-05T15:30:00.000-09:00')
    
    然而,由于实现的不同,一般建议避免使用内置解析器。此外,格式必须精确(例如,时间戳中包含秒和毫秒,偏移量中包含冒号(:),否则某些实现会将其视为格式错误而拒绝,并返回无效日期

    一旦有了日期对象,获取带有偏移量的“本地”时间戳就是一个格式化问题,这在以前已经被回答了很多次(例如)。没有任何像样的内置格式函数(在某些情况下可以,但通常缺乏功能),因此您必须要么使用,要么使用库

    下面的示例使用,建议作为moment.js的升级路径

    对于Luxon,如果您指定一个代表性位置,您将获得该位置在该日期日期和时间的偏移量。或者,您可以将偏移量固定为设定值,实质上是为没有代表性位置的时区设置偏移量,这样它就不会引用夏令时或历史偏移量更改:

    let DateTime=luxon.DateTime;
    //按指定位置的偏移量
    设d0=DateTime.fromISO('2020-01-01',{zone:'America/Yakutat'});
    设d1=DateTime.fromISO('2020-06-30',{zone:'America/Yakutat'});
    console.log(d0.toString());
    console.log(d1.toString());
    //