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

时间:2019-03-29 06:43:26

标签: javascript timezone-offset

我正在以这种格式获取日期字符串-'March 12 2019 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);
}

但是我得到的日期是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 pm

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

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分: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());