Преобразование строки даты в формате «12 марта 2019 9:30 утра» + заданное смещение в часовой пояс браузера без использования каких-либо библиотек - PullRequest
0 голосов
/ 29 марта 2019

Я получаю строку даты в этом формате - «12 марта 2019, 23: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), что неверно.

Ожидаемый результат должен быть, если дата 12 марта 2019 г. 23:30, а смещение равно -8, а мое местное время имеет смещение +5,5, я должен получить дату 13 марта 2019 г. 12:00.

convertToLocalTime('March 12 2019 11:30 pm', -8) следует указать дату 13 марта 2019 года в 12:00 вечера.

Ответы [ 2 ]

0 голосов
/ 29 марта 2019
  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());
0 голосов
/ 29 марта 2019

Может быть, что-то вроде этого:

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));
...