Javascript 转换格式为';2019年3月12日上午9:30'+;给定浏览器时区的偏移量,而不使用任何库

Javascript 转换格式为';2019年3月12日上午9:30'+;给定浏览器时区的偏移量,而不使用任何库,javascript,timezone-offset,Javascript,Timezone Offset,我得到了一个这种格式的日期字符串——“2019年3月12日11:30 pm”,还有以小时为单位的偏移量,如+5.5。我想将此日期转换为我的浏览器时区 我尝试了以下代码 function convertToLocalTime(date, offset) { const serverTime = new Date(date); const localOffset = offset * 3600000; const d = new Date(serverTime.getTime() + l

我得到了一个这种格式的日期字符串——“2019年3月12日11:30 pm”,还有以小时为单位的偏移量,如+5.5。我想将此日期转换为我的浏览器时区

我尝试了以下代码

function convertToLocalTime(date, offset) {
  const serverTime = new Date(date);
  const localOffset = offset * 3600000;
  const d = new Date(serverTime.getTime() + localOffset).toUTCString();
  return new Date(d);
}
但是我得到的日期是2019年3月12日星期二15:30:00 GMT+0530(印度标准时间),这是错误的

预期结果应该是,如果日期是2019年3月12日晚上11:30,给出的偏移量是-8,并且我的本地时间偏移量为+5.5,那么我应该得到日期为2019年3月13日下午12:00

convertToLocalTime('2019年3月12日晚上11:30',-8)

日期应为2019年3月13日下午12:00。

可能是这样的:

函数转换器本地时间(日期、偏移量){
var options={year:'numeric',month:'long',day:'numeric',hour:'numeric',minute:'numeric'};
var serverdate=新日期(日期);
var ISTOffset=330;
var tzDifference=offset*60+(ISTOffset+serverdate.getTimezoneOffset());
var offsetTime=新日期(serverdate.getTime()+tzDifference*60000);
返回offsetTime.toLocaleDateString(“en-US”,选项);
}

控制台日志(convertToLocalTime('2019年3月12日晚上11:30',-8.00))可能是这样的:

函数转换器本地时间(日期、偏移量){
var options={year:'numeric',month:'long',day:'numeric',hour:'numeric',minute:'numeric'};
var serverdate=新日期(日期);
var ISTOffset=330;
var tzDifference=offset*60+(ISTOffset+serverdate.getTimezoneOffset());
var offsetTime=新日期(serverdate.getTime()+tzDifference*60000);
返回offsetTime.toLocaleDateString(“en-US”,选项);
}
控制台日志(convertToLocalTime('2019年3月12日晚上11:30',-8.00))
  • 您应该反转偏移符号(从负到正,反之亦然)
  • 在此基础上,添加当前时区偏移量

    • (-n)
      反转数字符号
      n
    • 将以分钟为单位返回与UTC的时区差,因此您可以
      /60
      以小时为单位将其转换为相同的单位
    • 您还可以反转时区偏移的符号(以小时为单位)
  • 函数转换器本地时间(日期、偏移量){
    const serverTime=新日期(日期);
    常量localOffset=(-offset)+((serverTime.getTimezoneOffset()/60))*3600000;
    const d=新日期(serverTime.getTime()+localOffset.toutString();
    返回新日期(d);
    }
    设dt=convertToLocalTime('2019年3月12日晚上11:30',-8);
    控制台日志(dt);
    log(dt.toString())
    
  • 您应该反转偏移符号(从负到正,反之亦然)
  • 在此基础上,添加当前时区偏移量

    • (-n)
      反转数字符号
      n
    • 将以分钟为单位返回与UTC的时区差,因此您可以
      /60
      以小时为单位将其转换为相同的单位
    • 您还可以反转时区偏移的符号(以小时为单位)
  • 函数转换器本地时间(日期、偏移量){
    const serverTime=新日期(日期);
    常量localOffset=(-offset)+((serverTime.getTimezoneOffset()/60))*3600000;
    const d=新日期(serverTime.getTime()+localOffset.toutString();
    返回新日期(d);
    }
    设dt=convertToLocalTime('2019年3月12日晚上11:30',-8);
    控制台日志(dt);
    
    log(dt.toString())convertToLocalTime('2019年3月12日11:30 pm',-8.00)
    。我得到的输出是2019年3月12日下午3:30,这不是正确的日期。应该是2019年3月13日下午12:00。我用你的更新代码试过了。谢谢你帮我。我在IST(5.5将是偏移量)。因此,“2019年3月12日11:30下午”、-8.00应显示为2019年3月13日12:00下午。但我得到的时间是2019年3月12日10:00,我不完全理解你想要什么,但也许我的编辑可以帮你多一点。问候我很抱歉没有说清楚。它希望将2019年3月12日太平洋标准时间晚上11:30转换为我的当地时间。为此,如果我使用如下函数
    convertToLocalTime('2019年3月12日11:30 pm',-8.00)
    。我得到的输出是2019年3月12日下午3:30,这不是正确的日期。应该是2019年3月13日下午12:00。我用你的更新代码试过了。说“不使用任何库”,你是在要求1)一个依赖于实现的答案(可能因浏览器、平台等而异),或者2)让我们为你编写类似库的代码。基本上,在解析
    新日期(“2019-03-12T23:30:00+05:30”)
    之前,您需要将输入值转换为单个字符串,因为这是ECMAScript规范所要求的唯一格式。我相信我可以编写这样的代码来操作字符串,但为什么不使用已经测试并广泛使用的库呢?有很多可供选择,因此我的应用程序有一个大小限制。因此,添加矩库将使应用程序大小增加100kb。所以我不能使用这样的库。日期函数接受输入格式为“我正在传递”。当涉及时区转换时,我得到了错误的日期标准实际上不接受它,您只是发现特定的实现并没有拒绝它。你没有任何保证。另外,您是否尝试过其他库,如Luxon或Date fns?它们都比现在小得多