将格式为'2019年3月12日9:30 am'+给定偏移量的日期字符串转换为浏览器时区而不使用任何库

问题描述 投票:0回答:2

我得到了这种格式的日期字符串 - '2019年3月12日晚上11:30'以及小时偏移量+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);
}

但我得到的日期是Tue Mar 12 2019 15:30:00 GMT+0530 (India Standard Time)这是错误的。

预期结果应该是如果日期是2019年3月12日晚上11:30,并且给定的偏移是-8,我的当地时间偏移为+5.5,我应该将日期作为2019年3月13日中午12:00。

convertToLocalTime('March 12 2019 11:30 pm', -8)应该将日期定为2019年3月13日中午12:00。

javascript timezone-offset
2个回答
0
投票

也许是这样的:

function convertToLocalTime(date, offset) {

        var options = { year: 'numeric', month: 'long', day: 'numeric', hour: 'numeric', minute: 'numeric' };
       
        var serverdate  = new Date(date);
      
        var ISTOffset = 330;
  
        var tzDifference =  offset  * 60 + (ISTOffset + serverdate.getTimezoneOffset() );
        var offsetTime = new Date(serverdate.getTime() + tzDifference * 60000);

        return offsetTime.toLocaleDateString("en-US", options);
  }
    
    console.log(convertToLocalTime('March 12 2019 11:30 pm', -8.00));

0
投票
  1. 你应该反转偏移标志(负到正,反之亦然)
  2. 最重要的是,添加您当前的时区偏移量 (-n)反转号码n的标志 serverTime.getTimezoneOffset()将在几分钟内返回UTC的时区差异,因此您可以在几小时内将/60发送到同一个单位。 您还可以以小时为单位反转时区偏移的符号。

function convertToLocalTime(date, offset) {
  const serverTime = new Date(date);
  const localOffset = ((-offset) + (-(serverTime.getTimezoneOffset() / 60))) * 3600000;
  const d = new Date(serverTime.getTime() + localOffset).toUTCString();
  return new Date(d);
}

let dt = convertToLocalTime('March 12 2019 11:30 pm', -8);
console.log(dt);
console.log(dt.toString());
© www.soinside.com 2019 - 2024. All rights reserved.