Преобразование формата времени 2019-01-21 05: 05: 11.000000 в 1548060780546 - PullRequest
0 голосов
/ 22 января 2019

В моем угловом приложении я получаю зарегистрированное время как 2019-01-21 05: 05: 11.000000 (часовой пояс = UTC и timezone_type = 3) из внутреннего интерфейса API.Таким же образом я получаю текущее время, используя следующий код.

const now = new Date();
const currentTime = now.getTime();

Я получил вывод "1548152940836" для currentTime.

Я использовал метод getTimezoneOffset () для возврата разницы во времени между временем UTC и местным временем.

  const loggedTime = new Date(lastLoginAt).getTime();
  const now = new Date();
  const currentTime = now.getTime();

 if ((currentTime - (loggedTime - (new Date()).getTimezoneOffset()*60*1000)) > (7200 * 1000)){ }

В моем приложении я хочу получить разницу во времени между зарегистрированным временем и currentTime ипроверьте, больше ли разница во времени, чем 7200 секунд.Но это дает мне большое число от разницы во времени, которая всегда превышает 7200000 миллисекунд.

1 Ответ

0 голосов
/ 25 января 2019

Если ваша строка lastLoginAt точно отформатирована как 2019-01-21 05:05:11.000000 и представляет собой метку времени UTC, то вам сначала нужно изменить ее на 2019-01-21T05:05:11.000000Z перед анализом. Это расширенная форма UTC ISO 8601 (также RFC 3339), которая требуется спецификацией ECMAScript.

Тогда вы можете просто вычесть отметки времени. Нет необходимости корректировать смещение часового пояса, поскольку оба значения основаны на UTC.

(Для удобства вы также можете использовать Date.parse и Date.now вместо выделения Date экземпляров объекта. Оба возвращают числовые метки времени.)

const loggedTime = Date.parse(lastLoginAt.replace(' ', 'T') + 'Z');
const currentTime = Date.now();

if (currentTime - loggedTime > 7200000) {

}

В качестве альтернативы рассмотрите возможность использования библиотеки, такой как Luxon или date-fns , которая предоставляет функции, позволяющие сделать это еще проще.

...